First of all, you have a mistake in your code. The first line in your loop should be:
my @split_hit_total = split(/\s+/, $_);
since $_ is your loop variable here, not $hit_total. (use strict is good for catching things like that, BTW!)
That said, to answer your question: repurpose your HoA so that it stores (for each $protein_ac) the lowest encountered iEvalue along with its corresponding range, rather than all ranges. E.g. instead of pushing the range, do this:
if(!defined($HoA_total_hits{$protein_ac}) || $HoA_total_hits{$protei +n_ac}->{'iEvalue'} > $iEvalue) { $HoA_total_hits{$protein_ac}->{'iEvalue'} = $iEvalue; $HoA_total_hits{$protein_ac}->{'range_b'} = $range_b; }
Untested in the absence of example data... and I've not had my morning brew yet, so apologies if this is obvious rubbish.
(Side note -- I turned your HoA into a HoH here, but didn't change the name. I'd advise against putting the type of a variable in its name anyway.)
EDIT: using the sample data from Re^2: How can I add an entry in a has of arrays based on numeric comparison?, here's what Data::Dumper has to say about the contents of $HoA_total_hits after running this:
$VAR1 = { 'I5EU07' => { 'range_b' => '232-824', 'iEvalue' => '3.4e-137' } };
Does that look right?
In reply to Re: How can I add an entry in a has of arrays based on numeric comparison?
by AppleFritter
in thread How can I add an entry in a has of arrays based on numeric comparison?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |