What version of perl are you using? It works as posted for me running perl 5.6.1 on Redhat linux 8.
From perlre:
(??{ code })
WARNING: This extended regular expression feature is considered hi
+ghly experimental, and may be changed or deleted without notice. A si
+mplified version of the syntax may be introduced for commonly used id
+ioms.
This is a ``postponed'' regular subexpression. The code is evaluat
+ed at run time, at the moment this subexpression may match. The resul
+t of evaluation is considered as a regular expression and matched as
+if it were inserted instead of this construct.
The code is not interpolated. As before, the rules to determine wh
+ere the code ends are currently somewhat convoluted.
The following pattern matches a parenthesized group:
$re = qr{
\(
(?:
(?> [^()]+ ) # Non-parens without backtracking
|
(??{ $re }) # Group with matching parens
)*
\)
}x;
They say that time changes things, but you actually have to change them yourself.
Andy Warhol