in reply to print all data matching identical three alphabets from two different files

One way is to create the hash differently. Only keep the 1st 3 letters of File1 as the keys. Then, grab the 2nd column of File2 and, again, only use the 1st 3 letters.
use strict; use warnings; my ($f1,$f2,%patts,$f2_rec,$f2_field); $f1 = $ARGV[0]; $f2 = $ARGV[1]; open(PATT,"<", $f1) or die; while (<PATT>) { chomp; $patts{substr $_, 0, 3} = 1; } close(PATT) or die; open(FILE,"<", $f2) or die; while (defined ($f2_rec = <FILE>)) { chomp $f2_rec; $f2_field = (split(/ /,$f2_rec))[1]; $f2_field = substr $f2_field, 0, 3; if(exists($patts{$f2_field})) { print "$f2_rec\n"; } } close(FILE) or die;