【问题标题】:Passing a hashref to a sub将 hashref 传递给 sub
【发布时间】:2023-03-19 05:33:01
【问题描述】:

我的代码如下超级简单,但我只是没有让它按预期工作。

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,然后我想将该数据传递给测试子,测试子只是将其返回,以便 cgi 可以打印它,一直保持其结构。到目前为止,我没有成功,我希望有人能阐明如何正确编写这样的东西。

所以最后 dumper 应该打印如下内容:

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

【问题讨论】:

  • return $return_hash;
  • @Suic 你应该发布这个,并解释正在发生的事情,作为答案。

标签: json perl cgi


【解决方案1】:

您的代码归结为

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;

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多