my $paren_rx; $paren_rx = qr{ \( (?: (??{ $paren_rx }) # either match another paren-set | (?s: [^\\()]+ | \\. )+ # or match non-parens (or escaped parens) )? \) }x; my ($chunk) = $string =~ /((??{$paren_rx}))/;