制御構造(if)
必ずブレースで囲まなければならない。
if ( $var eq 'A' ) { .... }
if ( $var eq 'A' or $var eq 'B' ){ .... }
if ( $var eq 'A' ) { .... } elsif ( $var eq 'B' ) { .... } else { .... }
制御構造(while)
$count = 0; while ($count < 10) { $count +=1; print "count is now $count"; }
制御構造(foreach)
配列やリスト全体を処理するのは、foreachが便利
foreach $rock (qw/ bedrock slate lava /) { print "One rock is $rock.\n"; }
$_を使うと、以下のようにも書ける。
foreach (qw/ bedrock slate lava /) { print "One rock is $_.\n"; }
last演算子
break文と同じようなもので、現在実行中の最も内側のループブロックに作用して、ループを抜ける。
while(<STDIN>) { if(/__END__/) { last; # __END__マーカによりwhileループを抜ける } elsif (/fred/) { print; } }
next演算子
continue文と同じようなもの。
while (<>) { foreach (split) { $total++; next if /\W/; $valid++; $count{$_}++; } }
redo演算子
現在のループを再実行する。以下の例では、入力間違いがあれば、最初からタイピングのテストをやり直しさせる。
my @words = qw{ fred barney pebbles dino wilma }; my $errors = 0; foreach (@words) { print "Type the word '$_': "; chomp(my $try = <STDIN>); if ( $try ne $_ ) { print "Sorry - That's not right. \n\n"; $errors++; redo; } }