Метки блоков

Чтобы выполнить операцию не с внутренним, а каким-то другим блоком цикла, воспользуйтесь меткой. Метки в Perl напоминают другие идентификаторы – они тоже состоят из букв, цифр и символов подчеркивания, но не могут начинаться с цифр. С другой стороны, поскольку метки не имеют префиксного символа, их можно спутать с именами встроенных функций и даже с именами пользовательских функций. Скажем, называть метку print или if явно не стоит. По этой причине Ларри рекомендует записывать имена меток в верхнем регистре. Это не только гарантирует, что метка не будет конфликтовать с другими идентификаторами, но и упрощает ее поиск в коде. В любом случае метки создаются редко и встречаются лишь в небольшой части программ Perl. Чтобы назначить метку блоку цикла, поставьте ее с двоеточием перед началом цикла. Затем внутри цикла используйте метку в операторах last, next или redo по мере необходимости:

LINE: while (<>) {
foreach (split) {
last LINE if /__END__/; # Выход из цикла LINE
...
}
}

Для удобства чтения метку обычно рекомендуется ставить у левого поля, даже если текущий код обладает отступом более высокого уровня. Обратите внимание: метка обозначает целый блок, а не целевую точку в коде.


В предыдущем фрагменте специальный маркер __END__ отмечает конец всех входных данных. Встретив этот маркер, программа игнорирует все остальные строки данных (даже из других файлов). Часто в качестве имени выбирается существительное. Скажем, внешний цикл последовательно обрабатывает строки, поэтому мы назвали его LINE. Если бы имя присваивалось внутреннему циклу, его можно было бы назвать WORD, потому что в нем обрабатываются слова. Это позволяет создавать удобные и понятные конструкции вида next WORD или redo LINE.

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

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