#!/usr/bin/perl $cparens = qr/ (? \< (?: [^<>]++ | (?$+{intern}) )*+ \> ) /x; $ks="BinaryNode,OpMulAdd2>"; if ($ks =~ m/ ([^<>]++) \<(?'part1'[^<>]++(?:$cparens)?) \,(?'part2'[^<>]++(?:$cparens)?) \> /x) { print "ok\n"; } print "p1 $+{part1}\n"; print "p2 $+{part2}\n";