in reply to Optimizing Splitting of Array

Considering that all your columns are treated equally, I don't understand why you put the first 7 columns in separate variables, and the rest into an array. Might as well put everything in an array (but see remark below).

Since @rows is empty when you assign to it, no need to push onto it. You could write:

my @rows = ($name, $tel, $col3, $col4, $col5, $col6, join " ", @notes) +;
as well.

But looking at the code, all it archieves is collapsing multiple whitespace into a single space. I'd write it as:

while (<DATA>) { s/\s+$//; s/\s+/ /g; print $_, "\n"; }
which should do the same. No splitting and joining needed.