Mark-Jason Dominus wrote:
:This is not exactly the same, but I tried a direct translation:
:
:     $re = qr{ \( (??{$re}) \)
:             | (??{$re}) (??{$re})
:             | (?> [^()]+)
:             }x;
:
:and it looks worse and dumps core.

That's because the first non-paren forces it to recurse into the
second branch until you hit REG_INFTY or overflow the stack. Swap
second and third branches and you have a better chance:

  $re = qr{
    \( (??{$re}) \)
  |
    (?> [^()]+)
  |
    (??{$re}) (??{$re})
  }x;

(I haven't checked that there aren't other problems with it, though.)

Hugo

Reply via email to