Perl 6

Регулярные выражения — 4. Именованные правила

В механизме обработки регулярных выражений в Perl 6 появилось новое понятие — именованные правила (rules). Правило определяют аналогично функции (с использованием ключевого слова rule), однако тело правила содержит не perl-код, а некоторое регулярное выражение. Внутри правила можно произвольно использовать пробелы (иными словами, подразумевается модификатор /x). Чтобы вызвать правило при сопоставлении со строкой, достаточно указать его имя в угловых скобках:

rule match_number{
   \d+
}

Круглые скобки в этом примере выполняют обычную функцию сохранения результата в переменных типа $1.

Как и функции, правила могут принимать аргументы. От функций правила унаследовали и синтаксис объявления и способ использования переменных:

Второй пример печатает две строки: 1234 и 5678. При первом сопоставлении правило starts_with выбирает последовательность цифр, начинающихся с единицы, во втором случае — с 5.

Формальные параметры правила допустимо не указывать. В этом случае для доступа к переданным аргументам придется использовать массив @_. Например, предыдущий пример останется работоспособным, если правило объявить иначе:

rule starts_with {
   @_[0] \d+
}

 

rule starts_with ($first){
   $first \d+
}

sub main()
{
   my $string = "1234 5678 9012";

   $string =~ /(<starts_with (1)>)/;
   print "$1\n";

   $string =~ /(<starts_with (5)>)/;
   print "$1\n";
}

 

sub main()
{
   my $string = "February 2004";
   $string =~ /(<match_number>)/;
   print $1;
}

25 февраля 2004