Оператор redo

Триаду операторов управления циклами завершает оператор redo. Он возвращает управление в начало текущего блока цикла без проверки условия или перехода к следующей итерации. (Если вы программировали на C или другом похожем языке, не ищите аналоги. В этих языках похожего оператора нет.) Пример:

# Проверка навыков печати
my @words = qw{ fred barney pebbles dino wilma betty };
my $errors = 0;
foreach (@words) {
## Сюда redo передает управление ##
print "Type the word '$_': ";
chomp(my $try = );
if ($try ne $_) {
print "Sorry - That's not right.\n\n";
$errors++;
redo; # Возврат в начало цикла
}
}
print "You've completed the test, with $errors errors.\n";

Как и два других оператора, redo работает с любой из пяти разновидностей блоков циклов, а во вложенных циклах его действие распространяется только на внутренний блок цикла. Главное отличие между операторами next и redo заключается в том, что next перемещается к следующей итерации, а redo повторяет текущую итерацию. Следующий пример дает некоторое представление о том, как работают эти три оператора:

foreach (1..10) {
print "Iteration number $_.\n\n";
print "Please choose: last, next, redo, or none of the above? ";
chomp(my $choice = );
print "\n";
last if $choice =~ /last/i;
next if $choice =~ /next/i;
redo if $choice =~ /redo/i;
print "That wasn't any of the choices...


onward!\n\n";
}
print "That's all, folks!\n";

Если просто нажать Return без ввода каких-либо символов (попробуйте это сделать два-три раза), цикл просто продвигается к следующей итерации. Если выбрать last при достижении числа 4, цикл завершается, и число 5 уже не выводится. Если выбрать next на том же числе 4, переход к числу 5 происходит без вывода завершающего сообщения «…onward!». А если выбрать redo в той же фазе, итерация 4 будет выполнена заново.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Автоинкремент и автодекремент
Значение автоинкремента
Значение ускоренного логического оператора
Логические операторы
Метки блоков