foreach文
foreach文はfor文と似た構文です。foreachは値の集合であるリストを指定すると、リストに含まれる値の数だけ順に繰り返しを行います。(リストについては別のページで詳しく見ていきます)。
foreach文の書式は次のようになっています。
foreach 変数 (リスト){ 実行する処理1; 実行する処理2; }
リストに含まれる値を指定した変数に順に格納し、その度に繰り返し処理を1回行います。よって繰り返しされる回数はリストに含まれている値の数の分だけ行われます。
例えば3つの値が含まれるリストを使い、リストに含まれる値を順に出力するにはforeachを使って次のように記述できます。
my @fruit = ("りんご", "メロン", "イチゴ"); foreach my $name (@fruit){ print "$name¥n"; }
リストの値を格納する制御変数はforeach文よりも前で宣言を行ってもいいですし、この例のようにforeach文の中で宣言を行っても構いません。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my @fruit = ("りんご", "メロン", "イチゴ"); foreach my $name (@fruit){ print "$name¥n"; }
上記を「test5-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
for文とforeach文の関係
for文とforeach文は実は同じ構文です。for文で制御変数とリストを指定すればforeach文のように動作しますし、foreach文に3つの制御部分を指定すればfor文のように動作します。
for文で統一してしまうことも可能ですが、混乱してしまう場合もありますのでリストを使う場合にはforeach文を使うようにしておくといいのではないかと思います。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my @fruit = ("りんご", "メロン", "イチゴ"); for my $name (@fruit){ print "$name¥n"; }
上記を「test5-2.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
今回はfor文に対して制御変数とリストを与えて実行しています。このようにforeach文とfor文は同じ使い方をすることが出来ます。
( Written by Tatsuo Ikura )