my %file1; while(){ chomp; (my $id, my $number) = split /\t/; if ($id=~ m/^(CLS_S3_Contig[0-9]+)([-]?)([0-9]+)([_]?)([0-9]+)$/i) { $file1{$1} = [$3-8, $5+7]; # or should it be $5+8? } } print "Processed $. lines from $ARGV[0] file\n"; close(INPUT1); #### while(){ chomp; my @current_line = split /\t/; # eliminate unqualified lines early next unless $current_line[2] ==1 && $current_line[3] >= 3; if ($file1{ $current_line[0]}) { my ($lo, $hi) = @{ $file1{ $current_line[0] } }; if ($lo <= $current_line[1] && $current_line[1] <= $hi) { print join("\t", $_, "***", $current_line[1]), "\n"; } } } close (INPUT2); #### # eliminate unqualified lines early next unless $current_line[2] ==1 && $current_line[3] >= 3;