在Perl中循环关联数组

时间:2015-03-05 00:10:20

标签: perl

可能是一个超级简单的问题,在尝试循环嵌套关联数组时获取超级有用的错误消息:

  

全局符号“%t”需要显式包名称

代码是:

use strict;
use Data::Dumper;

my %test;
$test{"1"}{"stuff"} = "foo";
$test{"2"}{"stuff"} = "bar";

然后转储第二级数组很好:

foreach my $t (values %test){
        print Dumper($t);
}

给出了:

$VAR1 = {
          'stuff' => 'foo'
        };
$VAR1 = {
          'stuff' => 'bar'
        };

但是一旦我尝试访问第三级字符串,我就会得到上述错误,无论我使用$,s,%,qoutes或括号的组合。

foreach my $t (values %test){
        print Dumper($t{"stuff"});
}

2 个答案:

答案 0 :(得分:3)

您需要$t->{"stuff"}$t是哈希引用(不是实际哈希),因此您需要使用解除引用运算符。

答案 1 :(得分:2)

你得到的是哈希引用,因此,你必须取消引用它们:

foreach my $t (values %test){
 print Dumper($t->{'stuff'})
}

在perl %t中,@t$t(以及&t,但在大多数情况下这是特殊的)都是不同的变量名称。对于元素访问,您可以使用相应的paren类型来表示您的意思:

$t{boo} # accesses %t
$t[800] # accesses @t