【Perl】for/foreach/whileの使い分け
まずはforeachで書けないか考える
まず最初にforeachを使って書けないかを考える。foreachはループを最も簡単に書けるので、foreachで十分なのであれば、foreachを使う。foreachは繰り返しをするための条件を指定することができない。
my @animals = ('Cat', 'Dog', 'Mouse'); foreach my $animal (@animals) { print "$animal\n"; }
要素番号が必要なときは通常のfor文
次に要素番号が必要な場合があるとする。そのときは通常のfor文を使う。次のサンプルプログラムは、要素番号と配列の要素を出力するものになっている。「@animals」をスカラコンテキストで評価すると、配列の長さが取得できることに注意する。
my @animals = ('Cat', 'Dog', 'Mouse'); for (my $i = 0; $i < @animals; $i++) { my $animal = $animals[$i]; print "$i : $animal\n"; }
要素番号を増やしていかないような繰り返しはwhile文
while文は、for文と異なり「ループする条件」の部分しか持たない。
1. ファイルから行を読み込む
ファイルから行を読み込む場合はwhile文を使用する。
while (my $line = <>) { print $line; }
2. 配列をpopする
配列をpop関数を使って取り出してなくなったら終わりというような処理はwhile文で書く。
my @animals = ('Cat', 'Dog', 'Mouse'); while (my $animal = pop @animals) { print "$animal\n"; }
結論
要素番号が必要ならforを使用する。要素番号は不要だが、ループするにあたって、指定した条件に一致しない場合ループさせたくないようなときはwhileを使用する。前述した内容一致しない場合はforeachを使用する。
参考:for/while文を使った繰り返し処理 - Perlゼミ(サンプルコードPerl入門)