#! perl -w my %data; open IN, "file1.txt" or die "Ugh! $!"; while() { chomp; my($key, $value) = split /\|/ or next; $data{$key}[0] = $value; } open IN, "file2.txt" or die "Ugh! $!"; while() { chomp; my($key, $value) = split /\|/ or next; $data{$key}[1] = $value; } { open OUT, ">file3.txt" or die "Ugh! $!"; local($\, $,) = ("|\n", "|"); local $^W; # avoid "use of uninitialized value" foreach (sort keys %data) { print OUT $_, @{$data{$_}}[0, 1]; } }