我的代码如下超级简单,但我只是没有让它按预期工作。
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喜欢将该数据传递给test sub,后者只需将其返回,以便cgi可以打印它,所有这些保持其结构。到目前为止,我没有成功,我希望有人可以说明如何正确地写这样的东西。
所以最后转储器应该打印如下:
$VAR1 = { 'key' => 'value', 'key2' => 'value' };
答案 0 :(得分: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;