§5.5 foreach文


作成日:2001/07/30(月)

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などの、ループをより細かく制御するための関数を紹介します。


「§5.4 while文」へ 「§5.6 ループのネスト」へ
ソフトバンク パブリッシング株式会社

Copyright (C) can All Rights Reserved
e-mail:ishiki@mrj.biglobe.ne.jp