Are you sure the application doesn't output fixed-width data? If it did, then you could use
unpack. Otherwise, maybe you can use
\d instead of
\w if some of your columns always output numbers.
UPDATE: This seems to work. Probably no uglier than a regex:
use warnings;
use strict;
while (<DATA>) {
chomp;
my @cols = split;
my @a1 = splice @cols, 0, 3;
my @a2 = splice @cols, -7, 7;
my $pool = join ' ', @cols;
print join(';', @a1, $pool, @a2), "\n";
}
__DATA__
PID POLS U(%) POOL_NAME Seq# Num LDEV# H(%) VCAP(%) TYPE PM
003 POLN 0 Bad name with spaces 13453 2 61443 80 - OPEN N
002 POLN 52 DemoSolutions 54068 7 61454 80 - OPEN N