The hashes, %proph_prots, %euk_prots, %vir_prots
are not initialized with any values.
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.)