Perl 6

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

Как и обычные функции (sub), правила (rules) регулярных выражений допустимо определять не в виде отдельного именованного блока, а непосредственно по ходу работы программы. Само правило записывают внутри фигурных скобок, перед которыми стоит ключевое слово rule. Присвоив ссылку на такой блок переменной, мы получаем возможность использовать правило в регулярных выражений так же, как если бы оно было определено вне функции:

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

Первый раз совпадает подстрока «123», второй — «23».

 

sub main(){
   my $rule = rule {@_[0] \d+};
   my $string = "test 123 string";
   $string =~ /(<$rule (1)>)/;
   print "$1\n";
   $string =~ /(<$rule (2)>)/;
   print "$1\n";
}

 

sub main(){
   my $rule = rule {\d+};
   my $string = "test 123 string";
   $string =~ /(<$rule>)/;
   print $1;
}
26 февраля 2004