为什么我不能将变量分配给Perl中的哈希条目?

时间:2014-07-20 08:41:27

标签: perl

对不起,我和Perl超级生气了。请参阅以下代码:

foreach my $hash (keys %greylist)
{
  $t = $greylist{$hash};
  print $greylist{$hash}[4] . "\n";
  print $t[4] . "\n";
}

为什么$t[4]计算为一个空字符串,但$greylist{$hash}[4]应该是一个同样的东西评估一个IP地址?

1 个答案:

答案 0 :(得分:6)

$greylist{$hash}包含数组引用。当你这样做时:

print $greylist{$hash}[4];

Perl automatically treats it as an array reference但是当你这样做时:

$t = $greylist{$hash};
print $t[4];

您将数组引用分配给标量变量$t,然后尝试访问另一个变量的第5个元素@tuse strict会在这种情况下给您一个错误。

使用the arrow operator->取消引用:

$t = $greylist{$hash};
print $t->[4];

perlreftut有一个关于此的说明:

  

如果$aref包含对数组的引用,则$aref->[3]是数组的第四个元素。不要将此与$aref[3]混淆,@aref是一个完全不同的数组的第四个元素,一个看似$aref@aref$item@item和{{1}}的相同方式无关。