配列の表現は、個々の値をコンマで区切り、括弧 ()
で囲む:
(LIST)
配列値を要求しないコンテキストでは、C のコンマ演算子と同じく、 最後の要素の値が配列表現の値となる。例えば、
@foo = ('cc', '-E', $bar);
は配列 foo
に全配列値を代入するが、
$foo = ('cc', '-E', $bar);
は変数 bar
の値を変数 foo
に代入する。
注意: 変数として存在する(actual)配列のスカラーのコンテキストにおける値は
配列の長さである。次の例では $foo
に 3 を代入する。
@foo = ('cc', '-E', $bar); $foo = @foo; # $foo は 3 になる
配列表現の括弧を閉じる前に余分なコンマがあっても良い。 つまり、以下の表現は可能である。
@foo = ( 1, 2, 3, );
リストが評価される時は、 リストの要素はすべて配列のコンテキストで評価され、結果として得られる配列値は、 個々の要素がリストのメンバーであったかのようにリストに入れられる。 つまり、配列はリストにおいては区別がなくなる。リスト
(@foo,@bar,&SomeSub)
は @foo
, @bar
の全要素
および SomeSub
という名前のサブルーチンが返す全要素を含む。
リストの値は通常の配列と同様に添え字をつけて指定できる。
$time = (stat($file))[8]; # stat は配列値を返す $digit = ('a','b','c','d','e','f')[$digit-10]; return (pop(@foo),pop(@foo))[0];
配列のリストはその要素が全て左辺値であり、 かつその時にかぎり代入可能である。
($a, $b, $c) = (1, 2, 3); ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
最後の要素は配列又は連想配列であってもよい。
($a, $b, @rest) = split; local($a, $b, %rest) = @_;
実際にはリストのどこに配列を入れてもいいのだが、
リスト中の最初の配列が全ての値を取ってしまい、
その後の要素にはヌル値が入ってしまう。
これは local()
において便利かもしれない。(See section local.)
連想配列の表現は、キー、値として解釈されるべき値のペアを含む。
# 上記の map への代入と同じ。 %map = ('red',0x00f,'blue',0x0f0,'green',0xf00);
スカラーのコンテキストでの配列の代入は 代入の右辺の expression により得られる要素の数を返す。
$x = (($foo,$bar) = (3,2,1)); # $x を 2 ではなく 3 にセットする