Perl - разница между "next" и "continue"?

Быстрый Perl вопрос: при переходе через петлю (скажем, цикл While), в чем разница между next и continue команду? Я думал, что оба просто перейдут к следующей итерации цикла.

Ответ 1

Ключевое слово 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 автоматически break, потому что большинство программ сделать это в любом случае. Если вы хотите перейти к следующим случаям, нужно использовать 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 переходит к началу цикла. Условие цикла не оценивается.