リスト代入と左辺値

1つ前のエントリで、「リストへリストを代入」というコードを書きました。先ほどのコードでは正規表現が入ってわかりにくいので、省略して書くと、以下のようなコードです。

($ye, $mo, $da, $ho, $mi) = (2006, 5, 26, 15, 0);

この時、$ye は 2006 に、$mo は 5 に、$da は 26 に、$ho は 15 に、$mi は 0 になります。このような「リストに対する代入」(リスト代入)をするには「リストの要素が全て有効な左辺値でなければならない」という条件があります。
「左辺値」(lvalue)というのは、例えば以下のような代入文が成立する時、

$x = $y;

この「$x」の事を「左辺値」と呼びます。「代入される側」ですね。ちなみに「$y」は「右辺値」と呼ばれます。左辺値になれるのは「変数」「配列変数の要素」「ハッシュの要素」ぐらいでしょうか。要するに「書き換えられる記憶領域」です。
「有効な左辺値」とは「左辺値になれるモノ」という意味です。全ての要素が左辺値になれる場合に限って、リストに代入できるわけです。(^_^)


この「リスト代入」は Perl 独特の書き方ですね。少なくとも、僕が今までに経験した言語では、このような書き方はできず、1つの変数に対して1つの代入文を書く必要がありました。
例えば2つの変数の値を入れ替えたい時、他の言語(以下はC言語)では

tmp = x;
x = y;
y = tmp;

のように、一時的な変数(tmp)を使って入れ替える必要があります。
でも、Perl ではリスト代入を使えば

($x, $y) = ($y, $x);

と、1行で簡潔に、余計な変数を使わずに書く事ができます。美しい。(^_^)