制御構文(3) for
for といえばお馴染みのループ構文ですね。初期化式、条件式、再初期化式という3つの式を指定して、与えたブロックを繰り返す事ができます。
# fortest.pl
my @fruits = ("apples", "oranges", "bananas");
for (my $i = 0; $i < @fruits; $i++) {
print "I like $fruits[$i]!\n";
}
最初に配列変数 @fruits に3つのフルーツの名前を持たせています。
「my $i = 0」の部分が初期化式です。スカラ変数 $i を 0 で初期化していますね。0 からスタートという意味ですね。
「$i < @fruits」の部分が条件式。スカラ変数 $i と配列変数 @fruits を比較しています。こういった場合、@fruits はスカラコンテキストで評価されて、配列の要素数を表すのでした。つまりこの式は「$i が @fruits の要素数未満かどうか」を表しています。この条件式が真である限り、ブロックが繰り返し実行されます。
「$i++」の部分が再初期化式です。$i++ というのは「$iに1を足す」という意味になります。再初期化式はブロックが終端まで実行された時に評価されます。(あれ……どこかで聞き覚えがあるフレーズです)
実行結果です。
I like apples! I like oranges! I like bananas!
つまり、この for 文は
- まず $i に 0 を代入して
- $i が @fruits の要素数未満なら
- $fruits[$i] で $i 番の要素の文字列を表示して
- $i に 1 を足して
- 2. に戻る
という事になります。