Команды управления циклом
Команда last
Команда last немедленно прекращает выполнение цикла, в котором она задана, и передает управление на оператор, непосредственно следующий за оператором цикла. Ее целесообразно использовать для нахождения одного определенного значения в массиве (пример 5.12).
#! peri – w @letters = ("A".."Z"); for ($index=0; $index<01etters; $index++) { last if $letters[$index] eq "M"; } print $index;
Цикл в программе примера 5.12 будет выполняться, пока перебор элементов массива $ letters не достигнет элемента, содержащего символ "м". После чего будет выполнен первый после оператора for оператор программы. В результате будет напечатано число 12 – индекс элемента, содержащего символ "м".
Метка используется для конкретизации передачи управления в случае вложенных циклов: управление передается непосредственно на оператор, следующий за оператором цикла с указанной меткой (пример 5.13).
CYCLE_1: while (…){, CYCLE_2: for (…) { CYCLE_3: foreach (…) { last CYCLE_2; } Операторы цикла CYCLE_2 } Операторы цикла CYCLE_1 # Сюда передает управление t оператор last CYCLE_2; }
Если в команде last указать метку CYCLE_I, то управление будет передано на первый после самого внешнего цикла оператор программы. Если в команде last задать метку CYCLE_S (или задать ее вообще без метки), то управление будет передано на первый оператор группы операторы цикла CYCLE_2.
Передача управления командой last осуществляется не на оператор цикла с соответствующей меткой, а на оператор, непосредственно следующий за ним.
Команда last осуществляет выход из цикла, не выполняя никаких блоков операторов continue.
Команда next
Команда next позволяет пропустить расположенные после нее в теле цикла операторы и перейти на следующую итерацию цикла. Если оператор цикла содержит блок continue, то его операторы выполняются до проверки условия окончания цикла, с которой начинается следующая итерация. Одно из применений этой команды – обработать определенные элементы массива, ничего не делая с другими. Программа примера 5.14 присваивает всем элементам массива, содержащим четные числа, символ звездочка "*".
#! peri – w @array = (2, 5, 8, 4, 7,, 9); print "До: @array\n"; fоreach (Sarray) { next if $_ % 2; $_ = "*"; } print "После: @array\n";
Результат выполнения программы примера 5.14 показан ниже:
До: 2 5 8 4 7 9 После: * 5 * * 7 9
Если элемент массива нечетное число, то результат операции $_ % 2 равен i (Истина) и команда next инициирует следующую итерацию цикла foreach, не изменяя значение текущего элемента массива. Если значением элемента массива является четное число, то команда next не выполняется и значение элемента меняется на символ "*".