PERL: БИБЛИОТЕКА ПРОГРАММИСТА



              

PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 190


#   и конечным шаблонами,  расположенными в разных строках.

while (<>) {

if  ($НОМЕР_НАЧАЛЬНОЙ_СТРОКИ    ..   $НОМЕР_КОНЕЧНОЙ_СТРОКИ) # Строка находится между начальной и и конечной,  расположенными в разных строках.


198   Глава 6 • Поиск по шаблону

Комментарий

Из бесчисленных операторов Perl интервальные операторы . . и ..., вероятно, вызывают больше всего недоразумений. Они создавались для упрощения выбор­ки интервалов строк, чтобы программисту не приходилось сохранять информа­цию о состоянии. В скалярном контексте (например, в условиях операторов if и while) эти операторы возвращают true или false, отчасти зависящее от преды­дущего состояния. Выражение левый_операнд . . правый_операнд возвращает false до тех пор, пока левый_операнд не станет истинным. Когда это условие выполня­ется, левый_операнд перестает вычисляться, а оператор возвращает true до тех пор, пока не станет истинным правый операнд. После этого цикл начинается за­ново. Другими словами, истинность первого операнда «включает» конструкцию, а истинность второго операнда «выключает» ее.

Условия могут быть абсолютно произвольными. В сущности, границы интерва­ла могут быть заданы проверочными функциями mytestfunc(1) ., mytestfunc(2), хотя на практике это происходит редко. Как правило, операндами интервальных операторов являются либо номера строк (первый пример), шаблоны (второй пример) или их комбинация.

#  Командная строка для вывода строк с 15 по 17 включительно (см. ниже)
perl -ne 'print if 15 .. 17' datafile

#  Вывод всех фрагментов <ХМР> .. </ХМР> из документа HTML
while (о) {

print if m#<XMP>#i ., m#</XMP>#i;

#  To же,  но в виде команды интерпретатора

% perl -ne  'print if m#<XMP>#i  ..  m#</XMP>#i'  document.html

Если хотя бы один из операндов задан в виде числовой константы, интер­вальные операторы осуществляют неявное сравнение с переменной $. ($NR или $INPUT_LINE_NUMBER при действующей директиве use English). Поосторожнее с неявными числовыми сравнениями! В программе необходимо указывать чис­ловые константы, а не переменные. Это означает, что в условии можно написать 3 .. 5, но не $п .. $т, даже если значения $п и $т равны 3 и 5 соответственно. Вам придется непосредственно проверить переменную $..




Содержание  Назад  Вперед