对不起,我和Perl超级生气了。请参阅以下代码:
foreach my $hash (keys %greylist)
{
$t = $greylist{$hash};
print $greylist{$hash}[4] . "\n";
print $t[4] . "\n";
}
为什么$t[4]
计算为一个空字符串,但$greylist{$hash}[4]
应该是一个同样的东西评估一个IP地址?
答案 0 :(得分:6)
$greylist{$hash}
包含数组引用。当你这样做时:
print $greylist{$hash}[4];
Perl automatically treats it as an array reference但是当你这样做时:
$t = $greylist{$hash};
print $t[4];
您将数组引用分配给标量变量$t
,然后尝试访问另一个变量的第5个元素@t
。 use strict
会在这种情况下给您一个错误。
使用the arrow operator,->
取消引用:
$t = $greylist{$hash};
print $t->[4];
perlreftut
有一个关于此的说明:
如果
$aref
包含对数组的引用,则$aref->[3]
是数组的第四个元素。不要将此与$aref[3]
混淆,@aref
是一个完全不同的数组的第四个元素,一个看似$aref
。@aref
和$item
与@item
和{{1}}的相同方式无关。