use File::Copy; use strict; my (@col, $val, $i); open(COL, ") { push @col, $_ =~ m/(.*?):/; } close(COL); open(OUT, ">out.txt"); open(COL, ") { ($val) = $_ =~ m/(.*?):/; $_ =~ s/(.*?)(?=:)/$col[$i++]/ unless $val =~ m/^\s*$/; print OUT $_; } close(COL); close(OUT); copy("out.txt", "original.txt");