web-dev-qa-db-ja.com

Perl-「次へ」と「続行」の違いは?

簡単なPerlの質問:ループ(whileループなど)を通過するとき、nextコマンドとcontinueコマンドの違いは何ですか?どちらもループの次の反復にスキップするだけだと思いました。

20
JDS

continueキーワードは、ループのブロックの後にの後に使用できます。 continueブロックのコードは、次の反復の前(ループ条件が評価される前)に実行されます。制御フローには影響しません。

my $i = 0;
when (1) {
  print $i, "\n";
}
continue {
  if ($i < 10) {
    $i++;
  } else {
    last;
  }
}

にほぼ等しい

foreach my $i (0 .. 10){
  print $i, "\n";
}

continueキーワードは、given-when構成では別の意味を持ち、Perlのswitch-caseです。 whenブロックが実行されると、Perlは自動的にbreaksを実行します。これは、ほとんどのプログラムがとにかくそうするためです。次のケースにフォールスルーしたい場合は、continueを使用する必要があります。ここで、continueは制御フローを変更します。

given ("abc") {
  when (/z/) {
    print qq{Found a "z"\n};
    continue;
  }
  when (/a/) {
    print qq{Found a "a"\n};
    continue;
  }
  when (/b/) {
    print qq{Found a "b"\n};
    continue;
  }
}

印刷します

Found a "a"
Found a "b"

nextキーワードはループでのみ使用可能であり、新しい反復が含まれます。ループ状態の再評価。 redoは、ループブロックの先頭にジャンプします。ループ条件は評価されません。

17
amon