The hashes, %proph_prots, %euk_prots, %vir_prots are not initialized with any values.
in reply to Re^2: help with hash or arrays or hash references
in thread help with hash or arrays or hash references
If the only parameters you are using from the file are:
$Query_id, $Subj_id, $bit_score,
you could make your initialization line as:
my ($Query_id, $Subj_id, $bit_score) = (split /\t/, $line)[0, 2, -1];
Update: Those are hash refs in the Flag() function but they are being used with regular hash notation/syntax. (You have not declared use strict; at the beginning of the script. Thats how I found the uninitialized hashes mentioned above.)