Регулярные выражения. Разбор примеров

Дистрибутив Parrot содержит несколько примеров, описывающих работу с регулярными выражениями в Perl 6. Соответствующие файлы расположены в каталоге parrot/languages/perl6/t/rx. Рассмотрим первый из этих примеров, в котором собраны самые простые выражения. Обратите внимание на отличия от синтаксиса регулярных выражений Perl 5.

Для сопоставления регулярного выражения с текстовой строкой (вернее говоря, просто с переменной) служит бинарный оператор =~. Как видно из первой строки с его участием, внутри регулярного выражения можно использовать фигурные скобки с размещенным в них Perl-кодом. Более или менее близким аналогом этой конструкции в Perl 5 является модификатор /e.

Остальные (кроме последнего) примеры полностью прозрачны и понятны, если вы знакомы с использованием регулярных выражений в Perl 5.

В последнем сопоставлении с выражением <[asdfl]> появилась новая оценочная конструкция (называемая assertion). Сопоставление окажется удачным, если выражение, заключенное между угловыми скобками, истинно. В данном случае проверяется истинность подвыражения [asdfl], которое в свою очередь аналогично такой же конструкции в Perl 5 и требует наличия в проверяемой строке одного из указанных символов.

sub main() {
my $s = «hello»;
my $t = «ell»;
print «ok 2\n» if $s =~ /{ print «ok 1\n» }/;
print «ok 3\n» if $s =~ /hell/;
print «ok 4\n» if $s =~ /$t/;
print «ok 5\n» if $s =~ /\0154/; # == ‘l’
print «ok 6\n» if $s =~ /\0154\0154/;
print «ok 7\n» if $s =~ /\x6c\x6C/;
print «ok 8\n» if $s =~ /./;
print «ok 9\n» if $s =~ /<[asdfl]>/;
}