1

誰かが私にそれが何@{hash{$key}}を意味するのか教えてもらえますか?そして、私が書いたときに私が正しかったかどうか@{hash{$key}}[$i]=$list[$i+1]

4

2 に答える 2

7
@{hash{$key}}

奇妙な書き方です

@hash{$key}

これはハッシュスライスと呼ばれます。これにより、ハッシュから一度に複数の値をフェッチできます。例えば、

say for @hash{'a', 'b'};

意味

say for $hash{a}, $hash{b};

だから使うのはかなりばかげている

@hash{$key}

それ以外の

$hash{$key}

@{hash{$key}}[$i]=$list[$i+1];コンパイルされないので、いいえ、それを使用するのは正しくありませんでした。

于 2013-03-20T07:51:38.413 に答える
4

池上が説明するように、@{hash{$key}}はハッシュ スライス (1 つの要素のみ) です。

代わりにこれが必要になる可能性があります: @{$hash{$key}}. ハッシュの各要素が配列参照である場合、この構文で配列にアクセスできます。

たとえば、ハッシュに次のような配列が含まれているとします。

my %hash = (
    foo => [1, 2, 3, 4, 5],
    bar => [qw/baz sproing blargh/] 
);

@{$hash{foo}}だろう(1, 2, 3, 4, 5)

その場合、次の構文が機能します。

${$hash{$key}}[$i]=$list[$i+1]

配列全体ではなく、配列の要素にのみアクセスしていることに注意してください。したがって、${$hash{$key}}の代わりに使用します@{$hash{$key}}

同じことを行う別の方法は次のとおりです。

$hash{$key}->[$i]=$list[$i+1]

逆参照の->構文は${...}、特に複雑なデータ構造を持っている場合は、すっきりしているため、多くの場合 よりも好まれます。

于 2013-03-20T09:11:24.373 に答える