Вам необходимо явно указать, что вы вызываете регулярное выражение my
:
my regex paren {
'(' ~ ')' <&paren>*
}
Обратите внимание на добавленное &
.С этим:
say "(()())" ~~ /^<&paren>$/ # 「(()())」
say "(()()" ~~ /^<&paren>$/ # Nil
Хотя это правда, что иногда вы можете сойти с рук в явном виде написав &
, и действительно можете при его использовании:
say "(()())" ~~ /^<paren>$/ # 「(()())」
say "(()()" ~~ /^<paren>$/ # Nil
Это работает только потому, чтов компиляторе есть регулярное выражение, определенное в лексической области видимости с именем paren
, поэтому компилирует синтаксис <paren>
в него.В рекурсивном случае объявление не устанавливается до тех пор, пока не будет проанализировано регулярное выражение, поэтому нужно быть явным.