こんな感じかな。
my $plugin_regex; $plugin_regex = qr/ &\w+ (?: \( .*? \) )? (?: { (?: (??{$plugin_regex}) | .*? )+ } )? ; /x;
動的正規表現を使えない場合は、こんな感じで5段の入れ子までは大丈夫。
my $p1 = qr/&\w+(?:\(.*?\))?(?:{(?:.*?)+})?;/; my $p2 = qr/&\w+(?:\(.*?\))?(?:{(?:$p1|.*?)+})?;/; my $p3 = qr/&\w+(?:\(.*?\))?(?:{(?:$p2|.*?)+})?;/; my $p4 = qr/&\w+(?:\(.*?\))?(?:{(?:$p3|.*?)+})?;/; my $plugin_regex = qr/&\w+(?:\(.*?\))?(?:{(?:$p4|.*?)+})?;/;