Шаг 18.
Команда last

    На этом шаге мы рассмотрим использование команды last.

    Каждый цикл в программе завершается при достижении некоторого условия, определяемого самим оператором. В циклах while и for это связано с ложностью выражения-условия, а в цикле foreach с окончанием перебора всех элементов списка. Иногда возникает необходимость при возникновении некоторых условий завершить выполнение всего цикла, либо прервать выполнение операторов цикла и перейти на очередную итерации. Для подобных целей в языке Perl предусмотрены три команды last, next и redo, которые и называют командами управления циклом. На этом шаге мы рассмотрим команду last.

    Ее общий вид следующий:

  last ИДЕНТИФИКАТОР_МЕТКИ;
Идентификатор метки не обязателен.

    Команда last немедленно прекращает выполнение цикла, в котором она задана, и передает управление на оператор, непосредственно следующий за оператором цикла. Её целесообразно использовать для нахождения одного определенного значения в массиве.

    Приведем пример использования данной команды:

@letters = (“A”..“Z”);                                          # Массив
for ($index = 0; $index < @letters; $index++) {
    last if $letters[$index] eq “M”;             # Выход, если дошли до “М”
}
print $index;    # Вывод индекса найденного элемента  
Текст этого примера можно взять здесь.

    Цикл в данном примере будет выполняться, пока перебор элементов массива $letters не достигнет элемента, содержащего символ “M”. После чего будет выполнен первый после оператора for оператор программы. В результате будет напечатано число 12 – индекс элемента, содержащего символ “M”.

    Метка используется для передачи управления в случае вложенных циклов: управление передается непосредственно на оператор, следующий за оператором цикла с указанной меткой. Команда last осуществляет выход из цикла, не выполняя никаких блоков операторов continue.

   CYCLE_1: while (...) { 
      CYCLE_2: for (...) {
         CYCLE_3: foreach (...) { 
               last CYCLE_2; 
                   }
                  Операторы цикла CYCLE_2 
            }
      Операторы цикла CYCLE_1  # Сюда передает управление
                               # оператор last CYCLE_2;
}

    Если в команде last указать метку CYCLE_1, то управление будет передано на первый после самого внешнего цикла оператор программы. Если в команде last задать метку CYCLE_3 (или задать ее вообще без метки), то управление будет передано на первый оператор группы Операторы цикла CYCLE_2.

    На следующем шаге мы рассмотрим команду next.




Предыдущий шаг Содержание Следующий шаг