为什么perl不允许我将哈希引用的成员解引用到数组中?

时间:2012-10-01 18:37:42

标签: arrays perl

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

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

当我这样做时:

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

我收到错误“不是script.pl第41行的ARRAY引用”

但是,当我这样做时,它有效:

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

有什么我不理解的吗?有没有办法让第一个例子起作用?我试着在外面用@包装括号中的表达式,但这不起作用。提前感谢您的帮助。

3 个答案:

答案 0 :(得分:14)

这只是一个优先问题。

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

装置

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

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

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

答案 1 :(得分:11)

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

如果您将for循环中的 $myarr 替换为其RHS,则如下所示: -

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

答案 2 :(得分:3)

应该看起来像

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