2013-12-12 42 views
3

我的代碼如下超簡單,但我只是沒有得到它按預期工作。將hashref傳遞給子

use strict; 
use warnings; 
use CGI::Carp qw(fatalsToBrowser); 
use CGI qw(-dubug); 
use warnings; 
use diagnostics; 
use strict; 
use JSON; 
use Data::Dumper; 

my $q = CGI->new; 

my $data = $q->param('POSTDATA'); 
my $data_hash; 

if (defined($data)) { 
$data_hash = decode_json($data); 
} 

sub test { 
    my $return_hash = shift; 

    return \$return_hash; 
} 

my $return_to_print = test($data_hash); 

print $q->header(); 
print "This is a test: \n"; 
print Dumper($return_to_print); 

基本上我發送JSON的Perl腳本,我的JSON解碼成hashref,然後ID喜歡到數據傳遞到測試子誰只是做無非返回回去,這樣的CGI可以打印它一直保持其結構。到目前爲止,我沒有成功,我希望有人能夠闡明如何正確寫出這樣的東西。

那麼到底應該自卸車打印類似:

$VAR1 = { 'key' => 'value', 'key2' => 'value' }; 
+4

'$回報return_hash;' – Suic

+3

@Suic你應該張貼,與作爲答案,解釋發生了什麼。 –

回答

9

您的代碼歸結爲

my $data_hash  = decode_json($data); 
my $return_hash  = $data_hash; 
my $return_to_print = \$return_hash; 

它不應該是一個驚喜,$return_hash$return_to_print不同。您將標量的引用分配給$return_to_print而不是複製其值(引用散列)。你會需要以下爲他們相同

my $return_to_print = $return_hash; 

這就是說你需要以下條件:

return $return_hash;