use strict; my (@line,@last); while () { @line = split('\|',$_,8); @last = map { $line[$_] || $last[$_] } (0..$#line); print join('|',@last); } __DATA__ 1|krazken|123 Main|BFE|AR|72210|555-2345|1 2|kraken||||||1 3|krayken|||||555-2345|1