my $inv = {}; for my $index (keys %$rc) { my $subhash = $rc->{$index}; my @sorted = sort { $subhash->{$a} <=> $subhash->{$b} } keys %$subhash; if ($subhash->{$sorted[0]} < $subhash->{$sorted[1]}) { # this is the best match push @{ $inv->{$sorted[0]} }, $index; } }