use strict; use warnings; my %lookup; { open(my $file1, '<', 'file1.txt') or die("..."); while (<$file1>) { chomp; my @fields = split(/\|/, $_); $lookup{$fields[0]}{$fields[1]} = $fields[2]; } } { open(my $file2, '<', 'file2.txt') or die("..."); while (<$file2>) { chomp; my @fields = split(/\|/, $_); if (exists $lookup{$fields[0]}{$fields[1]}) { $fields[3] = $lookup{$fields[0]}{$fields[1]}; } else { $fields[3] = 'NO MATCH'; } print(join('|', @fields), $/); } }