6

Perl 术语让我感到困惑,它不是我的母语,所以请耐心等待。我会尝试使用正确的术语,但我会举一个例子来确保。

所以我在变量 $foo 中有一个哈希引用。假设 $foo->{'bar'}->{'baz'} 是一个数组引用。也就是说,我可以通过将 $foo->{'bar'}->{'baz'}->[0] 分配给标量来获取数组的第一个成员。

当我这样做时:

foreach (@$foo->{'bar'}->{'baz'})
{
    #some code that deals with $_
}

我收到错误“在 script.pl 第 41 行不是数组引用”

但是当我这样做时,它会起作用:

$myarr = $foo->{'bar'}->{'baz'};
foreach (@$myarr)
{
    #some code that deals with $_
}

有什么我不明白的吗?有没有办法让第一个例子工作?我尝试将表达式用括号括起来,并在外面加上 @,但这没有用。提前感谢您的帮助。

4

3 回答 3

14

这只是一个优先级问题。

@$foo->{'bar'}->{'baz'}

方法

( ( @{ $foo } )->{'bar'} )->{'baz'}

$foo不包含数组引用,因此错误。如果不省略引用表达式周围的可选花括号,则不会出现优先级问题。

@{ $foo->{'bar'}->{'baz'} }
于 2012-10-01T18:45:32.833 回答
11
$myarr = $foo->{'bar'}->{'baz'};
foreach (@$myarr)
{
    #some code that deals with $_
}

如果你$myarr用它的 RHS 替换你的 in for 循环,它看起来像: -

foreach (@{$foo->{'bar'}->{'baz'}})
{
    #some code that deals with $_
}
于 2012-10-01T18:41:48.420 回答
3

它应该看起来像

foreach (@{$foo->{'bar'}->{'baz'}})
{
    #some code that deals with $_
}
于 2012-10-01T18:40:19.450 回答