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