まくまくPerlノート
リスト代入
2008-02-28

代入の左辺に変数のリストを指定すると、右辺で指定したリストの各要素を一度に代入できます。

my ($one, $two, $three) = (1, 2, 3);

これは、サブルーチンのパラメータをスカラ変数に展開するときによく使われます。

sub do_something {
    my ($param1, $param2, $param3) = @_;
    ...
}

左辺の変数の数の方が、代入元のリストより多い場合は、残りの変数の値は undef となります。

my ($one, $two, $three) = qw/ AAA BBB /;  # $three は undef

逆に、左辺の変数の数が少ない場合は、残りのリストの要素は捨てられます。

my ($one, $two) = (1, 2, 3, 4, 5);  # 3, 4, 5 は捨てられる

左辺のリストの最終要素として配列変数を指定すれば、残りのリストの要素をすべて代入できます。

my ($first, @rest) = 1..5;  # @rest の値は (2, 3, 4, 5) になる

リスト代入は、変数の値のスワップにも使えます。

($a, $b) = ($b, $a);
2008-02-28