Here is some code to show you perl idioms on how to approach this problem.
#!usr/bin/perl
use strict;
use warnings;
my ($infile1 ,$infile2) = @ARGV;
open (my $in1 ,"<", $infile1) or die "Cannot open '$infile1':$!\n";
open (my $in2, "<", $infile2) or die "Cannot open '$infile2':$!\n";
my @values;
while ( <$in1> ){
chomp;
my @one = split;
next unless scalar(@one) >= 3; # Must have at least 3
push @values, [@one[0..2]];
}
close $in1;
while (<$in2>){
chomp;
my @two = split;
next unless scalar(@two) >= 5; # Must have at least 5
next unless grep {
$_->[0] eq $two[0]
and $_->[1] eq $two[3]
and $_->[3] eq $two[4]
} @values;
print join("\t",@two[0,3,4]) , "\n"
}
close $in2;
You will need to understand "array slices", and references.
"You're only given one little spark of madness. You mustn't lose it." - Robin Williams