I would do it something like this:
my %f1;
while (<FILE1>) {
chomp;
my @fields = split /\|/;
my @col3 = split /\s+/, $fields[2];
$f1{lc $fields[0]} = [$col3[0], $col3[2]];
}
while (<FILE2>) {
chomp;
my @fields = split /\s*\|\s*/;
my $name = lc $fields[0];
print "line $.: Name $fields[0] ";
if (exists $f1{$name}) {
if ($fields[1] == $f1{$name}[0] &&
$fields[3] == $f1{$name}[1] ) {
print "matched.\n";
}
else {
print "found but not matched.\n";
}
}
else {
print "not found.\n";
}
}
Which, in your case, would give output of:
line 1: Name David matched.
line 2: Name harry found but not matched.
line 3: Name harry found but not matched.
But I don't really know what you are trying to accomplish, or whether you want case insensitivity (remove the
lc's if you don't).