my $crazy_hash = {
'One' => 1,
'Two' => 1,
'Three' => 1,
};
foreach my $num (keys %crazy_hash) {
#DoSomething
}
我得到的错误是:
全局符号“%crazy_hash”需要在blah line blah
显式包名如果我执行我的%crazy_hash并在循环中定义它,它就可以了。为什么它不能正常工作?
答案 0 :(得分:4)
您尚未定义名为%crazy_hash
的哈希,您已定义了一个标量$crazy_hash
,其中包含对哈希的引用。
你可能是这个意思:
my %crazy_hash = ( One => 1, ...
...或者像其他人所建议的那样使用keys %{$crazy_hash}
访问密钥;然后,您需要使用$crazy_hash->{key}
而不是$crazy_hash{key}
来访问值。如果您需要了解参考文献,请阅读perlreftut。
答案 1 :(得分:3)
$crazy_hash
是对匿名哈希的引用。在5.14之前,您需要取消引用keys的引用:
for my $num (keys %{$crazy_hash}) {
从5.14开始:
从Perl 5.14开始,键可以采用标量EXPR,它必须包含对未经处理的散列或数组的引用。该参数将自动解除引用。钥匙的这个方面被认为是高度实验性的。在未来的Perl版本中,确切的行为可能会发生变化。