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

Jas*_*son 6 arrays perl

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

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

当我这样做:

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

我收到错误"在script.pl第41行不是ARRAY引用"

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

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

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

ike*_*ami 14

这只是一个优先问题.

@$foo->{'bar'}->{'baz'}
Run Code Online (Sandbox Code Playgroud)

手段

( ( @{ $foo } )->{'bar'} )->{'baz'}
Run Code Online (Sandbox Code Playgroud)

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

@{ $foo->{'bar'}->{'baz'} }
Run Code Online (Sandbox Code Playgroud)


Roh*_*ain 11

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

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

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

  • @JasonThompson那你为什么不用正确的解释来标记答案呢? (4认同)