如何存储数组元素内的哈希?

Oli*_* N. 1 arrays perl hash hashmap

的背景

我有一个Perl模块,它使用一个数组作为输入/输出参数,如下所示:

Execute({inputfile => $req->{modules}.'filename', param => \@xchange});
Run Code Online (Sandbox Code Playgroud)

在模块内部构建哈希并通过引用返回

$param[0] = \%values;
Run Code Online (Sandbox Code Playgroud)

这一切都很好(我认为)print Dumper @xchange[0];并将输出我想要的内容

$VAR1 = { '33' => 'Title1', '53' => 'Title2', '21' => 'Title3' };
Run Code Online (Sandbox Code Playgroud)


目标

我想循环遍历内容并逐个打印键/值对,例如像这样

%testhash = ('33' => 'Test1', '53' => 'Test2', '21' => 'Test3' );

foreach $key (keys %testhash) {
    print "LOOP: $key, value=$testhash{$key}\n";
}
Run Code Online (Sandbox Code Playgroud)

这个循环按预期工作,并通过print Dumper \%testhash;与上面数组元素相同的输出转储我的testhash

$VAR1 = { '33' => 'Test1', '53' => 'Test2', '21' => 'Test3' };
Run Code Online (Sandbox Code Playgroud)


问题

现在的麻烦似乎是,尽管两种结构看起来都是同一种,但我无法理解,如何正确访问存储在@xchange [0]中的返回哈希.

我曾尝试%realhash = @xchange[0];%realhash = \@xchange[0];,但随后print Dumper \%realhash;将输出$VAR1 = { 'HASH(0xa7b29c0)' => undef };$VAR1 = { 'REF(0xa7833a0)' => undef };分别.

因此,我要么需要一种方法来获取干净的新哈希中的@xchange [0]的内容,或者在@xchange [0]元素内部对哈希进行循环的方法.

我想我被整个哈希参考概念搞砸了,但我在这里不知所措,想不出谷歌的另一种方式.

mob*_*mob 6

$xchange[0]是一个哈希引用.使用dereference运算符%{...}将其作为哈希值进行访问.

%realhash = %{$xchange[0]};
Run Code Online (Sandbox Code Playgroud)

  • `%`是解除引用运算符(`perldsc`称之为"前缀derefencer"); 大括号是优先的. (2认同)