2013-12-12 48 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;