6

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 $_
}

私が理解していないことがありますか?最初の例を機能させる方法はありますか? @ を外側に付けて式を括弧で囲んでみましたが、うまくいきませんでした。助けてくれてありがとう。

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 $_
}

$myarrin for ループを RHS に置き換えると、次のようになります。

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 に答える