フリーCGIスクリプト配布サイト。
同じ処理を何度も繰り返すプログラムを書く場合、同じプログラムを何度も書けば実現することができます。例えば 繰り返しのテスト1。
~ 繰り返しのテスト10。
という文字を画面に表示させたい場合、一例ですが以下のようなプログラムを作成します。
#!/usr/local/bin/perl
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
print "<p>繰り返しのテスト1。</p>\n";
print "<p>繰り返しのテスト2。</p>\n";
print "<p>繰り返しのテスト3。</p>\n";
print "<p>繰り返しのテスト4。</p>\n";
print "<p>繰り返しのテスト5。</p>\n";
print "<p>繰り返しのテスト6。</p>\n";
print "<p>繰り返しのテスト7。</p>\n";
print "<p>繰り返しのテスト8。</p>\n";
print "<p>繰り返しのテスト9。</p>\n";
print "<p>繰り返しのテスト10。</p>\n";
print "</body>\n";
print "</html>\n";
exit;
これはこれで問題なく動作します。ですが繰り返す回数が100回になった場合や繰り返し実行するプログラムの量が多い場合、この方法では少し面倒です。修正時に入力ミスをしてしまう可能性も高いです。
このような場合、繰り返し用の命令を使用することにより、記述するべきプログラムの量を少なくすることができます。
繰り返し処理を行う方法はいくつか用意されていますが、そのうちの1つに『while制御文』があります。具体的には、以下のようなプログラムで繰り返し処理を行います。
while (繰り返す条件) {
条件に一致した場合に繰り返し実行するプログラム
}
if
の時と書き方が似ていますが、while
の場合は少し処理の流れが変わります。if
の場合は『条件に一致した場合に繰り返し実行するプログラム』が一度実行されただけでしたが、while
の場合は実行後に再度『繰り返す条件』を判定し、条件に合う間は『条件に一致した場合に繰り返し実行するプログラム』を実行し続けます。
先ほど挙げたプログラムを『while制御文』を使用して記述すると、以下のようになります。
#!/usr/local/bin/perl
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
$count = 1;
while ($count <= 10) {
print "<p>繰り返しのテスト$count。</p>\n";
$count++;
}
print "</body>\n";
print "</html>\n";
exit;
このプログラムの場合、繰り返す条件は $count <= 10
です。つまり、$count
が 10
以下ならば処理が繰り返し実行されます。
繰り返す処理の内容は print "<p>繰り返しのテスト$count。</p>\n";
と $count++;
です。つまり、画面に 繰り返しのテスト(変数countの内容)。
と表示してから $count
に 1
を加えます。
こうすれば $count
が 10
以下の間、画面に文字列を表示してから $count
の値が 1
ずつ増えていきます。そして $count
の値が 10
より大きく時点で繰り返し処理は終了します。
つまり、画面に 繰り返しのテスト1。
~ 繰り返しのテスト10。
が表示されるのです。
繰り返し処理を行うもう一つの方法に『for制御文』があります。while
と同様に繰り返し処理を行うことができますが、プログラムの書き方が違います。具体的には、以下のようなプログラムで繰り返し処理を行います。
for (繰り返し準備処理 ; 繰り返し条件式 ; 繰り返し後処理) {
条件に一致した場合に繰り返し実行するプログラム
}
先ほど while
で記述したプログラムを for
を使用したものに書き換えると、以下のようになります。
#!/usr/local/bin/perl
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
for ($count = 1; $count <= 10; $count++) {
print "<p>繰り返しのテスト$count。</p>\n";
}
print "</body>\n";
print "</html>\n";
exit;
「繰り返し準備処理」は繰り返し処理に入る前に一度だけ実行されます。それ以降は
となります。
繰り返し処理は『foreach制御文』で行う事もできます。これは以下のようなプログラムで繰り返し処理を行います。
foreach 繰り返し対象の値が代入される変数 (繰り返し対象) {
繰り返し実行するプログラム
}
先ほど while
で記述したプログラムを foreach
を使用したものに書き換えると、以下のようになります。
#!/usr/local/bin/perl
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
foreach $value (1 .. 10) {
print "<p>繰り返しのテスト$value。</p>\n";
}
print "</body>\n";
print "</html>\n";
exit;
このプログラムの場合、繰り返し対象は 1 .. 10
です。このように指定すると、繰り返しを10回実行する事ができ、$value
には1~10の値が順に代入されていきます。繰り返す処理の内容は print "<p>繰り返しのテスト$value。</p>\n";
です。つまり、画面に「繰り返しのテスト(数値)。」と10回表示されます。((数値)の部分には、1~10の値が順に表示されます。)
…というわけで3つの繰り返し処理を紹介しましたが、while
、for
、foreach
のどれを使っても繰り返し処理を行う事ができます。解りやすいと思った繰り返し制御文を使用すればいいでしょう。
while
、for
、foreach
による繰り返し処理は、繰り返す条件が成立する間は処理が実行し続けられます。ですが、ループ制御文を使用すれば、特定の条件に応じてループから抜けるなどの動作ができるようになります。
ループ制御文には、以下のものがあります。
制御文 | 意味 |
---|---|
continue |
今回の繰り返し処理をやりなおす |
next |
今回の繰り返し処理をスキップし、次の回の繰り返し処理を行う |
last |
繰り返し処理から直ちに抜ける |
先ほど挙げた『while制御文』を使用したサンプルにループ制御の処理を加えると、以下のようになります。
#!/usr/local/bin/perl
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";
$count = 1;
while ($count <= 10) {
if ($count > 5) {
last;
}
print "<p>繰り返しのテスト$count。</p>\n";
$count++;
}
print "</body>\n";
print "</html>\n";
exit;
これを実行すると、ブラウザに 繰り返しのテスト1。
~ 繰り返しのテスト5。
までが表示されます。本来は10まで表示されるのですが、$count
が 5
になった時点で繰り返し処理から抜けるようにしています。