Perl 5.9.5との機能比較(5)

正規表現パターンの再帰呼び出しについて、再帰が停止しないパターンのチェックは、どうなっているのかを調べた。

相互呼び出しで再帰している場合も、以下のような単純なものであればチェックされる。

"aaa" =~ /(?<n1>(?&n2))(?<n2>(?&n1))/
#=> Pattern subroutine nesting without pos change exceeded limit in regex

エラーメッセージから判断すると、実行中にチェックしている。

しかし、以下のパターンは停止しなかった。

"aaa" =~ /\A(?<n1>a|(?&n2))(?<n2>(?&n1))\z/

実行中にチェックしているのであれば、停止できるように思うのだが。

鬼車の場合のチェックは全てコンパイル時点で行うので、停止しないパスを含んでいるパターンは全部エラーとしている。

/\A(?<n1>a|\g<n2>)(?<n2>\g<n1>)\z/ =~ "aaa"
#=> never ending recursion