my $bal; $bal = qr /[(]((?:(?>[^()]+)|(??{$bal}))*)[)]/; my $func = qr /([a-zA-Z]\w*)\s*$bal/; while (<>) { while (/$func/g) { print "Name: $1; arguments: $2\n" } } #### foo (bar ()) #### foo ("("); bar (")))"); #### /* This works (really!) */
## foo (bar ()) ##
## foo ("("); bar (")))"); ##
## /* This works (really!) */