Indeed Text::Balanced might be a better solution although the suggested code fails to recognize '(fff)' as a separate, third, item. (probably because the parenthesis have an unbalanced nested parenthesis)
As a matter of fact, I would understand either taking them all like imp (i.e. assuming that the missing parenthesis are all in the end) or this last one (i.e. assuming that the missing parentheses close the littlest possible group), while I don't see a generalisation rule for your choice.