リストの要素に変数を使用
リストの各要素には数値や文字列などだけではなく変数や式を記述することができます。
リストの要素に式を記述するというのは次のような場合です。
my ($str1, $str2); my $name = "伊藤"; ($str1, $str2) = ($name, "東京都");
この場合、リストの1番目の要素は変数「$name」です。要素として変数を記述した場合には、その時変数に格納されていた値があたかも値として記述されているように扱われます。よって変数「$str1」には変数「$name」に格納されている「伊藤」が格納されます。
次にリストには式を記述することが出来ます。例えば次のような場合です。
my ($num1, $num2); my $zei = 0.5; ($num1, $num2) = (20 * $zei, 800);
この場合、リストの1番目の要素は「20 * $zei」と言う処理が行われた結果となります。よって変数「$num1」には数値の「20」と変数「$zei」に格納されている「0.5」が乗算された結果だる「10」が格納されます。
リストの要素として変数を格納することができるので次のような記述も可能です。
my ($num1, $num2); $num1 = 30; $num2 = 20; ($num1, $num2) = ($num2, $num1);
この場合は変数「$num1」と変数「$num2」に格納されていた値が入れ替わって格納されます。この時注意して頂きたいのは変数「$num1」に変数「$num2」が格納された時点で変数「$num1」に格納される値は変化しますが、次に変数「$num2」に格納される変数「$num1」の値は変化する前の値が格納されます。
つまりリストを使って変数に値を格納する場合は、まずリストの値が一時保管された後でその保管された値が順に変数に格納されるのであって、変数に格納する過程では格納されるリストの値は変化しません。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my ($str1, $str2); my $name = "伊藤"; ($str1, $str2) = ($name, "東京都"); print "$str1¥n"; print "$str2¥n"; my ($num1, $num2); my $zei = 0.5; ($num1, $num2) = (20 * $zei, 800); print "$num1¥n"; print "$num2¥n"; ($num1, $num2) = ($num2, $num1); print "$num1¥n"; print "$num2¥n";
上記を「test2-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )