in reply to Trying to avoid line noise (brain cramp)

Out of all the ideas posted above, the one that resonates most with me so far is the idea of using a hash instead of an array for part of it. I would start here:
my @s = ( /([^(]+)(\([^)]+\))(.*)/ );
Using a hash would clarify what's being matched here (I'm not sure myself. ). Maybe it would be something like this (using a hash slice).
my @s{qw/table fields values/}) = ( /([^(]+)(\([^)]+\))(.*)/ );
that means that later on in the code you would be comparing {fields} instead of [1], which would be more intuitive. That s usually a trigger point for me-- If I'm doing much with the arrays by calling out specific positions like that, I usually ask myself "would be clearer to use a hash here?".

Perhaps related, one of my favorite uses for hash slices at the moment is to put the results of a DBI selectrow_array statement into a hash in a single step like:

@row{qw/name company title/} = $DBH->selectrow_array("...");

-mark