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


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


Продемонстрируем отличия на примере:

$digits =    123456789  ,

@nonlap = Sdigits =~/(\d\d\d)/g

@yeslap = $digits =V('?=(\d\d\d))/g

print    Non-overlapping      @nonlap\n

print    Overlapping             @yeslap\n

Non-overlapping-       123   456   789

Overlapping:              123  234  345 456  567  678  789

Модификаторы /s и /m используются для поиска последовательностей, содер­жащих внутренний перевод строки. При указании /s точка совпадает с \п — в обычных условиях этого не происходит. Кроме того, при поиске игнорируется значение устаревшей переменной $*. Модификатор /т приводит к тому, что " и $ совпадают в позициях до и после   \п   соответственно Он полезен в режиме


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

поглощения файлов, о котором говорится во введении к главе 8 «Содержимое файлов» и рецепте 6.6.

При наличии модификатора /е правая часть выполняется как программный код, и затем полученное значение используется в качестве заменяющей строки. Например, подстановка s/(\d+)/spnntf("%#x ', $1)/ge преобразует все числа в шестнадцатеричную систему счисления — скажем, 2581 превращается в 0хЬ23.

В разных странах существуют разные понятия об алфавите, поэтому стан­дарт POSIX предоставляет в распоряжение систем (а следовательно, и программ) стандартные средства для представления алфавитов, упорядочения наборов сим­волов и т. д. Директива Perl use locale предоставляет доступ к некоторым из них; дополнительную информацию можно найти в странице руководства perllocale. При действующей директиве use locale в символьный класс \w попадают симво­лы с диакритическими знаками и прочая экзотика. Служебные символы измене­ния регистра \u, \U, \1 и \1_ (а также соответствующие функции uc, ucfirst и т. д.) также учитывают use locale, поэтому \u превратит а в £, если этого потребует локальный контекст.

Специальные переменные

В результате некоторых операций поиска по шаблону Perl устанавливает зна­чения специальных переменных. Так, переменные $1, $2, $3 и т. д. до бесконечнос­ти (Perl не останавливается на $9) устанавливаются в том случае, если шаблон содержит обратные ссылки (то есть часть шаблона заключена в скобки). Каж­дая открывающая скобка, встречающаяся в шаблоне слева направо, начинает за­полнение новой переменной. Переменная $+ содержит значение последней об­ратной ссылки для последнего успешного поиска. Это помогает узнать, какой из альтернативных вариантов поиска был обнаружен (например, при обнаружен­ном совпадении для /(х,*у)|(у *z)/b переменной $+ будет находиться содержи­мое $1 или $2 — в зависимости от того, какая из этих переменных была заполне­на). Переменная $& содержит полный текст совпадения при последнем успешном поиске. В переменных $ и $' хранятся строки соответственно до и после совпа­дения при успешном поиске:




- Начало -  - Назад -  - Вперед -