Perlの説明      1.for 文   2.while 文   3.foreach 文   4.last,next,redo 演算子

  6. 繰り返しについて説明します。



 1.for 文

・for 文によるループ


for 文 記述例
for ($i=0;$i<10;$i++) { $data = $data . 'A'; } print $data . "\n"; # 10回、繰り返す。 $i で制御 # AAAAAAAAAA が表示


for (初期処理; ループ条件; 増分) { 条件が真の場合の命令(条件が偽になるまでループする) }

初期処理 : 最初に1回だけ行う処理。
ループ条件 : 「条件が真の場合の命令」の前に行う条件。
増分 : 「条件が真の場合の命令」の後に行う処理。

※それぞれの処理(条件)が、複数あるときは、カンマ「,」で区切ります。
※無条件の時は省略可です。 for(;;){ ...
配列のループ処理 例
@a = ("mon","tue","wed","thu", "fry","sat","sun"); for($i=0; $i<=$#a; $i++) { print $a[$i]," "; } print "\n"; # 配列の初期化 # $#a:配列の最後の要素の添字(6) # mon tue wed thu fry sat sun を表示 # $i < @a ; @a は要素数 7 でも可





 2.while 文

while 文 記述例
$i=0; while ($i<10) { $data = $data . 'A'; $i++; } print $data . "\n"; # for 文の初期処理と同じ # 10回、繰り返す。 $i で制御 # for 文の増分処理と同じ # AAAAAAAAAA が表示

while (ループ条件) { 条件が真の場合の命令(条件が偽になるまでループする) } 又は while (ループ条件) { 条件が真の場合の命令(条件が偽になるまでループする) } continue{ 1ループ後の処理; }

ループ条件 : 「条件が真の場合の命令」の前に行う条件。
1ループ後の処理 : 「条件が真の場合の命令」の後に行う処理。

※それぞれの処理(条件)が、複数あるときは、カンマ「,」で区切ります。



 3.foreach 文

foreach 文 記述例
@tbl=('A=1','B=2','C=3','D=4'); foreach $cell (@tbl) { print $cell . "\n"; } # テーブル内の要素を出力する

foreach 変数 (配列変数) { 命令(配列変数がなくなるまでループする) }
配列変数(@xxx)から要素を順次、スカラー変数($xxx)に代入して、 ブロック内処理を実行します。



 4.last next redo 演算子

・ループ内で流れを制御できる演算子

last 記述例
open (IN , "< address.txt"); while (<IN>) { if ( /suzuki/ ) { $save = $_; last; } } print $save; close(IN); # address.txt ファイルを open # 入力レコードがある限り繰り返す # 入力レコードに suzuki の文字列 #  があればそのレコードをセーブ # while ブロックを抜ける # セーブしたレコードを印刷する # address.txt ファイルを close
next 記述例
@a = ("blue","green", "darkblue","darkgreen"); for($i=0; $i<=$#a; $i++) { if ( $a[$i] =~ /blue/ ){ next; } print $a[$i]," "; } print "\n"; # $#a:配列の最後の要素の添字 # blue があれば、 # 以下の処理をパス # green darkgreen を表示

last ループの途中でそのブロックから抜ける next ループの次の繰り返しへ進む redo ループを条件判定しないで再び実行する for 文では、増分は、実行されず、そのままの状態で、 ブロックの最初の文より処理します。 レコードを入力しているループなら、次のレコードを 入力せずに、また同じレコードを処理することになります。


・ 多重ブロック(入れ子形式)の制御

多重ブロック 記述例
LABEL1: while (<>) { $i = 1; chop; $t = 0; while ($i <= $_) { $t = $t + $i ; if ($t > 50) { print $_ . ':' . $t . '>50' . "\n"; last LABEL1; } $i++; } print $_ . ':' . $t . '<50' . "\n"; } print 'end' . "\n"; # while キーボードから入力 # 改行をカット # while 入力数字だけループ # 1+2+3... # 1+2+3... > 50 # 入力が 10 のとき 55 > 50 ? # 真: 例 10:55>50 を表示 # 偽: $i = $i + 1 # 入力数字だけループ終了時 # 例 9:45<50 を表示し次入力 #last LABEL1でここへ抜ける



1.for 文   2.while 文   3.foreach 文   4.last,next,redo 演算子     [ Top ]