Оператор qr/…/ и модификаторы
Объект регулярного выражения компилируется вместе со своими модификаторами, эти режимы поиска "вшиваются" в откомпилированное регулярное выражение, и их нельзя потом изменить. Пример:
$_='aB'; my $re=qr/[a-z]+/; print $& if /$re/;
Идет поиск с учетом регистра символов, на печать выводится a. Модификаторы, находящиеся снаружи объекта регулярного выражения, не могут повлиять на его работу:
print $& if /$re/i;
print $& if /(?i)$re/;
print $& if /(?i:$re)/i;
Все равно выводится только буква a. Модификатор должен стоять в самом операторе, который возвращает объект регулярного выражения:
$_='aB'; my $re=qr/[a-z]+/i; print $& if /$re/;
Теперь печатается aB.
Верно и обратное: режимы поиска, которые были установлены внутри объекта регулярного выражения, не влияют на остальную часть регулярного выражения, в которое входит этот объект. Пример:
$_='aB'; my $re=qr/(?i)[a-z]+/; print $& if /${re}b/;
Ничего не напечатается, т.к. режим поиска без учета регистра (?i) не действует вне объекта регулярного выражения $re. Здесь фигурные скобки, окружающие имя переменной, отделяют ее от последующих букв так же, как и в случае с интерполяцией переменных. Следующий пример:
$_='aB'; my $re=qr/(?i)[a-z]+/; print $& if /${re}B/;
напечатает aB.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий