open FIRST,"file1" or die "Can't open file1: $!\n"; open LAST,"file2" or die "Can't open file2: $!\n"; my %names ; my $write_new = 0 ; while () { /(\w*) (\d*)/ ; $names{$1} = $2 ; } close FIRST; while () { /(\w*) (\d*)/ ; if (!defined($names{$1})) { $write_new++ ; $names{$1} = $2 ; } } close LAST; if ($write_new) { open NEW,">","file3" or die "Can't open file3: $!\n"; foreach (sort keys %names) { print NEW "$_ $names{$_}\n" ; } close NEW; }