Изучаем Perl
975b8bba

Оператор redo


Третий способ передачи управления в блоке цикла — оператор redo. Эта конструкция обеспечивает переход в начало текущего блока (без повторного вычисления контрольного выражения):

while (условие) {

# redo передает управление в эту точку программы

ЧТО-ТО;

ЧТО-ТО;

ЧТО-ТО;

if {условие) {

какие-то действия;

какие-то действия;

redo;

еще_что-то;

еще_что-то;

еще что-то;



}

*

Если в данном цикле есть оператор continue, который мы не рассматривали, next переходит в начало блока continue, а не в конец блока цикла. Это практически одно и то же.

Блок if здесь тоже не учитывается; считаются только циклообразующие блоки.

Пользуясь оператором redo, оператором last и "голым" блоком, можно построить бесконечный цикл, образующийся внутри блока:

( -...,. .

начальные_действия;

начальные_действия;

на чалы1ые_действия;

if (условие) ( last;

} последующк1е_действия;

последух1щие_действия;

последухщие_действия;

redo;

}

Такая схема годится для while-подобного цикла, некоторая часть которого должна выполняться как инициализационная перед первой проверкой. (В разделе "Модификаторы выражений"

мы покажем, как можно использовать оператор if с меньшим числом знаков препинания.)



Содержание раздела