in reply to recursive split

Do you really need to do it recursively? What about

@parts=split/(?=\(|\))/; print for @parts;

You get following output:

Using a ( ( modified yeast ( in PCNA promoter ) ) one-hybrid ( screen ) ) to identify potential ( SRF cofactors ) in cell

Now you can process the list in a simple loop. In every step if first character is opening parenthesis, you increase variable holding nesting level, if closing, you decrease the variable. And do your processing.

You don't even have to split, just use regexp:

for(/(?:^|\(|\))[^()]*/g) { print # or some processing }