11 KiB
11 KiB
title | author | date | wordtwit_post_info | categories | ||
---|---|---|---|---|---|---|
『新版Perl言語プログラミングレッスン入門編』第6章: 繰り返し のつづき | kazu634 | 2008-02-07 |
|
|
つづきー
while
繰り返しの中でlastを使うと、繰り返しを終了するよ。次のプログラムは「END」という行があったらそこで繰り返しを終了している。
use strict; use warnings; my @array = (, 1, 2, 3, 4, 5, 6, 7, 8, 9); my $flag = ; swhile ($flag < 10) { $flag = $flag + 1; if ($array[$flag] == 5){ last; } print "$array[$flag]\n"; }
こいつはこんな風に書き換えることも可能。
use strict; use warnings; my @array = (, 1, 2, 3, 4, 5, 6, 7, 8, 9); my $flag = ; while ($flag < 10) { $flag = $flag + 1; last if ($array[$flag] == 5); print "$array[$flag]\n"; }
こっちの方がスマートだ。
繰り返しの中でnextを使うと、繰り返しを「次」に進めます。たとえば次のようなプログラムだと、配列の5番目をスキップして表示することになるよ。
use strict; use warnings; my @array = (, 1, 2, 3, 4, 5, 6, 7, 8, 9); my $flag = -1; while ($flag < 10) { $flag = $flag + 1; next if ($array[$flag] == 5); print "$array[$flag]\n"; }
他にもredoとかあるよ。
for
for文の構文は
for (初期化; 条件式; 次の一歩) {
繰り返して実行する部分
}
となるよ。例はこんな感じ。
use strict; use warnings; for (my $i = ; $i < 10; $i++) { print "$i\n"; }
こいつはCライクな書き方だけど、perlではこれは次のように書くこともできる。
use strict; use warnings; for ( .. 9) { print "$_\n"; }
do .. untilによる繰り返し
do … until構文を使うと、条件判定をはじめに行うのではなく最後に行うことができます。次の文は、標準入力から入力された文字列を表示し、endが入力されると終了します。
use strict; use warnings; my $line; do { $line = <STDIN>; print $line; } until ($line eq "end\n");
do … while構文で書くこともできるけど、そのときは真偽が逆になることに注意してね。
use strict; use warnings; my $line; do { $line = <STDIN>; print $line; } while ($line ne "end\n");
文字列の繰り返し
演算子xを用いると、文字列の繰り返しを作ることができます。例えば次の文は’-‘を40個表示します。
use strict; use warnings; print '-' x 40, "\n";
次のようにすると、文字列$strに合わせて横線の長さが上下するよ。
use strict; use warnings; my $str = 'Lord Jim: the Failure of Education'; print '-' x length($str), "\n"; print $str, "\n"; print '-' x length($str), "\n";
grepによる繰り返し
関数grepは配列の中をすべてgrepする。
use strict; use warnings; my @word = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); my @found = grep(/^S/, @word); print "@found\n";
mapによる繰り返し
後で書く。