プログラムは文の集合から成っている。 代入文にしろ print 文にしろ、それらは左から右へ、上から下へ順番に実行されていく。 そして最後の文が実行されると、プログラムは終了となる。 このように順番に実行されていく様子を「プログラムの流れ」と呼ぶが、これをコントロールする方法がいくつか用意されている。
例として、九九表を作る問題を考えてみよう(あんまりおもしろくないが)。 最初は7の段の九九を表示するプログラムを作ってみる。 次のような出力が得られれば成功だ。
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
print 文を使えば、こんなプログラムでも結果は得られる。
print "7 * 1 = 7\n"; print "7 * 2 = 14\n"; print "7 * 3 = 21\n"; print "7 * 4 = 28\n"; print "7 * 5 = 35\n"; print "7 * 6 = 42\n"; print "7 * 7 = 49\n"; print "7 * 8 = 56\n"; print "7 * 9 = 63\n";
しかしこれでは面倒だ。 そこで、プログラムで楽をしよう。
for ($i = 1; $i <= 9; $i++) { $ans = 7 * $i; print "7 * $i = $ans\n"; }
for 文は、ループ(繰り返し)を作るのに便利な機能だ。 一般的な形式はこうだ。
for (初期化 ; 条件式 ; 再初期化 ) { ループ; }
for の直後のカッコの中身は、セミコロンで区切られた3つのパートからなる。 最初のパート「$i = 1」は、最初に1度だけ実行される初期化パートだ。 ここでは変数 $i に 1 を代入している。 次の「$i <= 9」はテストを行う条件式パートで、条件式を評価して、真ならばループを実行し、偽ならばループを終了する。 最後の「$i++」はループの最後に実行される再初期化パートだ。
プログラムの流れを順に説明しよう。
以上で、たった4行のプログラムが9行の出力を生み出すわけである。
Perl では、for に似た foreach 文も用意されている。 条件や後処理などをいちいち明示しなければならない for 文と違って、 九九表のように「ある値から別の値へ1ずつ変化する場合」などは、foreach の方が簡単に書ける。
foreach $i (1 .. 9) { $ans = 7 * $i; print "7 * $i = $ans\n"; }
カッコの中の「1 .. 9」というのが、「1から9まで1ずつ順に」という意味だ。 その数値が $i に代入され、ループが実行される。 結果は for 文のときとまったく同じだ。
これを用いて、九九表を完成させてみよう。 いちいち式を表示すると、欄が足りなくなってしまいそうなので、簡単に答えだけ表示することにしよう。
foreach $i (1 .. 9) { foreach $j (1 .. 9) { $ans = $i * $j; print "\t$ans"; } print "\n"; }
結果は次のようになる。
% perl kuku.pl 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
81 項目の表が、瞬間的に表示されるはずだ。