use Modern::Perl; ; while () { chomp; my ( $PID, $POLS, $U, $POOL_NAME, $Seq, $Num, $LDEV, $H, $VCAP, $TYPE, $PM ) = / ^ (\d+) \s+ (.+?) \s+ (\d+) \s+ (.+?) \s+ (\d+) \s+ (\d+) \s+ (\d+) \s+ (\d+) \s+ ([^ ]+) \s+ ([^ ]+) \s+ ([^ ]+) $ /x; say join ';', ( $PID, $POLS, $U, $POOL_NAME, $Seq, $Num, $LDEV, $H, $VCAP, $TYPE, $PM ); } __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 #### 003;POLN;0;Bad name with spaces;13453;2;61443;80;-;OPEN;N 002;POLN;52;DemoSolutions;54068;7;61454;80;-;OPEN;N