ちと訂正。
$regex = qr/\((?:(??{$regex})|.)*?\)/;
($match) = /($regex)/;
こうしないと欲張りマッチになってしまう。

2重まで限定で良ければ、($match) = /(\((?:\(.*?\)|.)*?\))/;
3重まで使いたければ、($match) = /(\((?:\((?:\(.*?\)|.)*?\)|.)*?\))/;
ってのはダメ?
もちろん、(??{ CODE }) 使った方は何重でも使えます。