Глава 9: Управляющие структуры.
9.1 Оператор last
Выполняя некоторые из предыдущих упражнений, вы, возможно, иногда думали: "Если бы в моем распоряжении был С-оператор break, все было бы нормально". Даже если такая мысль и не приходила вам в голову — все равно позвольте мне рассказать о Perl-операторе для преждевременного выхода из цикла last.
Оператор last обеспечивает выход из самого внутреннего блока цикла, в котором расположен этот оператор*, передавая управление оператору, следующему непосредственно за этим блоком. Например:
while (что-то) {
что-то;
ЧТО-ТО! ЧТО-ТО;
if (условие) {
что-то_или_другое;
что-то_или_другое;
last; # выход из цикла while
}
еще что-то, еще что-то;
}
# last передает управление в эту точку программы
* Конструкция типа do (} while/until с точки зрения операторов next, last и redo циклом не считается.
если условие истинно, то выполняются строки что-то_или_другое, после чего оператор lastзавершает циклwhile.
Оператор last учитывает только блоки, образующие цикл, а не блоки, необходимые для построения определенных синтаксических конструкций. Это значит, что блоки для операторов if и else, равно как и для конструкций do {} while/until, "не считаются"; учитываются только блоки, которые образуют циклы for, foreach, while, until и "голые" блоки. ("Голый" блок — это блок, не являющийся частью более крупной конструкции, например цикла, подпрограммы, оператора if/then/else.)
Допустим, мы хотим посмотреть, было ли почтовое сообщение, сохраненное в файле, послано пользователем merlyn. Такое сообщение могло выглядеть следующим образом:
From: merlyn@stonehenge.com (Randal L. Schwartz)
To: stevet@ora.com
Date: Ol-DEC-96 08:16:24 PM -0700
Subject: A sample mail message
Here's the body of the mail message. And here is some more.
Нам нужно было бы найти в этом сообщении строку, которая начинается словом From:, а затем посмотреть, не содержит ли эта строка регистрационное имя merlyn.
Это можно было бы сделать так:
while (<STDIN>) ( # читать входные строки
if (/^From: /) { # начинается ли строка со слова From:? Если да...
if (/merlyn/) { # то сообщение от merlyn!
print "Email from Randal! It's about time!\n";
}
last; # дальше искать строки From: не нужно, поэтому выйти
} # конец цикла "if from:"
if (/^5/) ( # пустая строка?
last; # если да, больше строки не проверять
}
} # конец цикла while
Найдя строку, которая начинается со слова From:, мы выходим из цикла, потому что хотим видеть только первую такую строку. Кроме того, поскольку заголовок почтового сообщения заканчивается на первой пустой строке, мы можем выйти и из основного цикла.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|