in reply to A better way to make the script run faster?

Doing 27 million of anything is going to take a while.

I should note that =~/^$gl[$index]$/ is better written as eq $gl[$index] unless you have regex metacharacters in your @gl which you have not shown.

A better way to go about this, is to scan @hfr_genes and count the genes using a hash, which will have {LYPLA1 => 13245, CD9=> 42, MYC=>13, ...}. That way, you only scan through your 73372 values ONCE. Then print the tallies by looping over the 375 values once.

73372 + 375 << 73372 * 375 ;)