x が配列参照であるとします。
[]匿名の配列参照を{}提供し、匿名のハッシュ参照を提供することを知っています。とは@{$x}どういう意味ですか?
これは、配列 refを逆参照することを意味します。
参照された配列の内容が表示されます。
シンプルな
@$x
あなたの場合。
この例のように、データ構造{ }に複数のレベルがある場合、文字が必要です。
@{ $foo->{first_level}->{second_level} }
また
@{ $foo->[$first_level]->[$second_level] }
これは他のシジルでも機能します:
%{ } # HASH
$ # SCALAR
逆参照です。@{ $ref }配列をそのまま参照することです。@arrayつまり、使用する@{ $ref }場所ならどこでも使用できます@array。
>perl -E"@array = qw( a b c ); say $_ for @array;"
a
b
c
>perl -E"$ref = [qw( a b c )]; say $_ for @{ $ref };"
a
b
c
明確な場合は、カーリーを省略できます。
>perl -E"$ref = [qw( a b c )]; say $_ for @$ref;"
a
b
c
if$xは配列への参照です。
@a = (1,2,3);
$x = \@a
次に@$xまたは@{$x}を使用すると、 が返され@aます。
文脈とそれに続くものに依存します。スカラーコンテキストでは:
$y = @{$x};
参照先の配列内の要素の数を返し$xます。
リストコンテキスト:
@y = @{$x};
配列の要素を返します。
続く場合[LIST]:
@{$x}[1,42]
これは、参照先である配列内の指定された要素のリストである配列スライスを生成し$xます。
続く場合{LIST}:
@{$x}{ 'foo', 'bar' }
これは、参照先であるハッシュ内の指定されたキーの値のリストであるハッシュ スライスを生成します$x。
{}周囲は匿名ハッシュの構築$xに使用されるものとは関係がないことに注意してください。これらはコード ブロックの区切り文字です。{}それらの中にあるものが単純なスカラー変数である場合、それらは省略できます。省略されていない場合は、任意の式、または最後に参照を返す複数のステートメントを含めることができます。