インターネット&PC120%活用:インターネット活用編

ループ
 
Perlにおけるループ、while, for についてとりあげてみます。

1 while, until, do
Perlの繰り返し処理として、まずwhile, until, do を見てみます。
各命令の書式は以下の通りです。

while ( 条件式 ) { 命令文 }  条件式が真の間、命令文を繰り返し実行します。条件式が偽になるとループを
                    抜けます。
                    条件式が最初から偽の時は、命令文は一度も実行されずループは終了します。
until ( 条件式 ) { 命令文 } 条件式が偽の間、命令文を繰り返し実行します。条件式が真になるとループを抜
                   けます。
                    条件式が最初から真の時は、命令文は一度も実行されずループは終了します。

while,untilでは最初に条件式の評価をするので、命令文が一度も実行されない場合も生じます。一回は命令文を
実行したい場合は、以下の2つを使います。
do { 命令文 } while( 条件式 );  まず命令文を実行し、最後に条件式を評価します。真の間繰り返します。
do { 命令文 } until( 条件式 ); まず命令文を実行し、最後に条件式を評価します。真の間繰り返します。

1〜10までを表示するごくごく簡単なプログラム例をあげておきます。
$num=1;
while($num<=10) {
print "$num \n";
$num++; }

2 for
ループの定番 for です。ほぼC言語と仕様はいっしょです。
for (初期値; 条件式; 更新式 ) { 命令文 }
初期値には、for ループ開始時の初期値を設定します。
条件式が真の間、ループし命令文を実行します。
命令文が実行され1回ループが終了すると、更新式が実行されます。

1〜10までを表示するプログラムをfor ループで作ってみます。whileの場合と比較してみてください。
for ($num=1; $num<=10; $num++) {
print "$num \n"; }

3 ループ制御 last, next, redo, exit
Perlではループ制御の命令がちょっと豊富です。Basicではnextだけだし、C言語では、break,continueがありますが、
Perlにはlast,redoがあります。

last
C言語のbreakと同等の機能です。while,forループを抜け、ループの後の命令文に移ります。

next
ループの残りの部分をとばして(実行せず)、ループの式の評価に戻ります。機能的にはBasicのnextと同じですね。

redo
ループの残りの部分をとばして、ループ内の最初の命令文に戻ります。ループの式の評価はされません。

exit
プログラムそのものを実行終了します。

それぞれの機能の違いは以下の図を見て下さい。

while (条件式)<--|
{                |
命令文<--|       |
命令文   |       |
redo; ---|       |
命令文           |
next;------------|
exit();---->プログラム終了  
last;------|
命令文     |
    }      |
命令文<----|


4 サンプルプログラム
ごく簡単なサンプルプログラムを作ってみました。
whileループは無限ループになっています。while(1)とすると、条件式は1で常に真となるので、無限ループ
になります。このプログラムを実行するとwhileループに入ったことを示す"while loop"という
表示をして、forループに突入します。forループは1づつカウントアップして表示するループです。
いったん、next, redo, last, exitを選ぶメニューが表示されます。1 nextを選択すると、forループの式の評価
に戻り、$i++ で変数$iが1つカウントアップします。
2 redoを選ぶと、forループの最初の命令文、すなわちprint "for loop count: $i\n"; に戻るので、元のままの
数値を表示します。
3 last を選択すると、forループを抜けます。このプログラムではforループを抜けてwhileループに戻ることに
なるので、"while loop"の表示から始まります。
4 exitを選択すると、プログラムが終了します。
それ以外の数値を入力すると、通常にループし、$iがひとつカウントアップします。

while(1){
 print "while loop\n";

for ($i=0; $i<100; $i++){
 print "for loop count: $i\n";
 print"1. next  2. redo  3. last  4. exit :";
 $t=<stdin>;
 chomp($t);

 if($t==1){ next;}
  elsif($t==2){redo;}
  elsif($t==3){last;}
  elsif($t==4){exit(0);}
  }
} 

実行例です。
C:\Perl>perl loop.pl
while loop
for loop count: 0
1. next 2. redo 3. last 4. exit :1
for loop count: 1
1. next 2. redo 3. last 4. exit :1
for loop count: 2
1. next 2. redo 3. last 4. exit :1
for loop count: 3
1. next 2. redo 3. last 4. exit :2
for loop count: 3
1. next 2. redo 3. last 4. exit :3
while loop
for loop count: 0
1. next 2. redo 3. last 4. exit :1
for loop count: 1
1. next 2. redo 3. last 4. exit :4

C:\Perl>


おまけです。1〜10までを表示する次ぎのプログラムをuntilを使って書いてみて下さい。
$num=1;
while($num<=10) {
print "$num \n";
$num++; }

答え。できたら今回は卒業です。

TopPage 

inserted by FC2 system