Печатает
Found a$
Замечу еще, что пустая метапоследователность \Q\E вызывает ошибку синтаксиса, так же как и \U\E и \L\E. Комбинации \U\L и \L\U также почему-то вызывают ошибки синтаксиса.
Внутри классов все эти метапоследовательности \u, \l, \U…\E, \L…\E, \Q…\E также работают. Вот примеры:
$_='A'; print $& if /[\ua]/;
Напечатает A.
$_='AB]'; print $& if /[\Ua]b\E]/;
Напечатает AB].
Здесь обратите внимание на "сквозное" действие метапоследовательности \U…\E, которая продолжает действовать за пределами класса. Ведь рассматриваемые метапоследовательности применяются сразу после интерполяции переменных, поэтому механизм поиска соответствия получит регулярное выражение /[A]B]/.
Вот пример полезной идиомы: в переменной $name задано имя человека буквами произвольного регистра. Мы с помощью последовательности \u\L в любом случае делаем первую букву заглавной, а остальные - строчными:
$_='Andrey'; my $name='aNDreY'; print $& if /\u\L$name\E/;
Напечатает Andrey.
Внутри классов это тоже работает:
$_='Andrey'; my $name='aNDreY'; print $& if /[\u\L$name\E]{6}/;
Будет напечатано Andrey. Регулярное выражение будет иметь вид /[Andrey]{6}/.
Еще раз заметиме, что внутри переменных эти метапоследовательности не распознаются.
Например:
#!/usr/bin/perl -w use strict;
$_='A'; my $name='\\ua'; print $& if /$name/;
Возникает сообщение:
Unrecognized escape \u passed through in regex; marked by <-- HERE in m/\u <-- HERE a/ at a.pl line 6.
В регулярное выражение мы передали строку \ua. Но в интерполируемых переменных рассматриваемые метапоследовательности не работают.
Сделаю еще одно замечание насчет использования \u, \l, \U…\E и \L…\E. В документации алгоритм их работы не разъяснен, не написано, какую ассоциативность имеют эти операторы - левую или правую. Ведь их действия могут конфликтовать друг с другом. К примеру, какой напечатается строка "\Ua\lAa"? Эскейп-последовательность \l говорит, что следующая буква A будет прописной, а \U говорит, что все после нее до конца строки будет заглавным. В итоге напечатается AAA. Зесь мы видим, что эти операторы имеют правую ассоциативность, т.е. выполняются справа налево. То же справедливо, когда рядом стоят символы \l\u и \u\l. Однако, если вместе стоят символы \U\l, \l\U, \L\u и \u\L, то префиксы \l и \u имеют приоритет перед метасимволами \L и \U. Сравните результаты:
print "\L\uaA\n"; print "\LaA\uaA\n";