use strict; use warnings; my @fields = split /\s+/, ; # print "BEFORE: ",(join '|',@fields),"\n"; my $prem_et = $fields[7].' '.$fields[8]; splice @fields,7,2,$prem_et; my $nd_al = $fields[8].' '.$fields[9]; splice @fields,8,2,$nd_al; # print "AFTER: ",(join '|',@fields),"\n"; while (){ chomp; my @entries = split /\s+/,$_; # look at @entries before joining the name # print +(join '|',@entries),"\n"; my $name_with_space = $entries[1].' '.$entries[2]; # see the doc for splice: we remove item 1,2 and replace the with a single # $name_with_space splice @entries,1,2,$name_with_space; # UPDATE for null age @entries = (@entries[0..4],'',@entries[5..$#entries]); # but since we learn 'splice' we can do with it too: # splice @entries,4,1,$entries[4],''; # look at entries after splice # print +(join '|',@entries),"\n"; # foreach index of entries we print both corresponding field and entry print map {"$fields[$_]\t$entries[$_]\n" } 0..$#entries; print "\n"; } __DATA__ Animal keepers M/F YEAR DOB AGE FSM PREM ET ND AL EAL GIRAFFE JAMES LE M 9 10/12/2007 Y Y N N HIPPOS JACKIE LEAN F 6 11/12/2007 Y N Y Y ZEBRAS JAMES LEHERN M 3 12/12/2007 N N N Y LIONS AMIE CAHORT M 1 13/12/2012 Y Y Y N #### Animal GIRAFFE keepers JAMES LE M/F M YEAR 9 DOB 10/12/2007 AGE FSM Y PREM ET Y ND AL N EAL N Animal HIPPOS keepers JACKIE LEAN M/F F YEAR 6 DOB 11/12/2007 AGE FSM Y PREM ET N ND AL Y EAL Y Animal ZEBRAS keepers JAMES LEHERN M/F M YEAR 3 DOB 12/12/2007 AGE FSM N PREM ET N ND AL N EAL Y Animal LIONS keepers AMIE CAHORT M/F M YEAR 1 DOB 13/12/2012 AGE FSM Y PREM ET Y ND AL Y EAL N