Go to the first, previous, next, last section, table of contents.

配列の表現

配列の表現は、個々の値をコンマで区切り、括弧 () で囲む:

(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 にセットする

Go to the first, previous, next, last section, table of contents.