use Parse::RecDescent;
my $teststr="blah1,blah2(blah3,blah4(blah5,blah6(blah7))),blah8";
my $grammar = q {
list: <leftop: item ',' item>
item: word '(' list ')' <commit>
| word
word: /\w+/
};
my $parser = new Parse::RecDescent ($grammar) or die "Bad grammar!\n";
defined $parser->list($teststr) or print "Bad text!\n";