【これだけ覚えりゃなんとか使えるPerlメモ4】制御構造

制御構造(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;
  }
}