可能是一个超级简单的问题,在尝试循环嵌套关联数组时获取超级有用的错误消息:
全局符号“%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"});
}
答案 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