foreach文は、今まで見てきたfor文やwhile文とはチョット違っていて、ループのための条件をプログラマーが自由に変更することが出来ません。 foreach文は、配列やリストを受け取って、その各要素をスカラー変数に一時的に代入し、その後で以後の実行文を実行します。 そして配列やリストの要素がなくなるとループから抜け出します。
foreach スカラー変数 (リスト){
実行文;
}
リストの部分には配列や、リストを返す式を入れることも出来ます。 次に使用例を見てみましょう。 次の例は@list配列の要素を順番に表示するスクリプトです。
@list = ("can", "masa", "hide");
foreach $value (@list){
print "$value\n";
}
上の例ではまず、@listの最初の要素、つまり"can"が$valueにセットされます。 次にその後のprint文が実行され、今度は@listの2番目の要素"masa"が$valueにセットされ、print文で表示され、最後に"hide"が$valueにセットされてprint文によって表示されます。 そして@listに要素がなくなるとforeachループから抜け出します。
foreach文ではリストの要素を代入するためのスカラー変数は省略することが出来ます。 これを省略した場合、リストの要素は特殊変数$_に代入されます。 これを使って上のスクリプトを書きかえると次のようになります。
@list = ("can", "masa", "hide");
foreach (@list){
print "$_\n";
}
リストの要素を逆順にしたりソートしたりして操作するには、「§3.3 配列を操作する」で紹介したsortやreverseなどの関数を使います。
@list = ("can", "masa", "hide");
#@listの要素を逆順に表示
foreach (reverse(@list)){
print "$_\n";
}
#@listの要素をソートして表示
foreach (sort(@list)){
print "$_\n";
}
またハッシュのキーをソートして扱うときには次のようにするのが一般的です(「§4.2 ハッシュを操作する」参照)。
%menu = (
"bread" => 80,
"milk" => 50,
"salad" => 100,
);
foreach(sort(keys(%menu))){
print "$_ : $menu{$_}\n";
}
foreach文は、フォームデータの操作などをする時に便利なループです。
ここではforeach文について見てきました。 これでfor、while、foreachとPerlのループ構造を全部見てきたことになります。 次の節ではループのネストとlast、nextなどの、ループをより細かく制御するための関数を紹介します。