Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';在Perl中,我给散列项分配一个变量吗?_Perl - Fatal编程技术网

为什么可以';在Perl中,我给散列项分配一个变量吗?

为什么可以';在Perl中,我给散列项分配一个变量吗?,perl,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地址?$greylist{$hash}包含数组引用。当您这样做时: print $greylist{$ha

对不起,我对Perl非常生疏。请参阅以下代码:

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

为什么
$t[4]
计算为空字符串,而
$greylist{$hash}[4]
应该是相同的东西,却计算为IP地址?

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

print $greylist{$hash}[4];
$t = $greylist{$hash};
print $t[4];
但是当您这样做时:

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

将数组引用分配给标量变量
$t
,然后尝试访问另一个变量
@t
的第5个元素<代码>使用严格的在这种情况下会给您一个错误

使用,
->
,取消引用:

$t = $greylist{$hash};
print $t->[4];
请注意:

如果
$aref
持有对数组的引用,则
$aref->[3]
是数组的第四个元素。不要将其与
$aref[3]
混淆,后者是一个完全不同的数组的第四个元素,一个冒名为
@aref
$aref
@aref
$item
@item
是不相关的


use strict
会告诉您错误所在。始终
严格使用;使用警告位于每个Perl程序的顶部。