my %scored; . . . foreach my $a (@{ $array_ref }) { if (exists $scored{$a}) { # We've already scored this one push @{ $bar->{$scored{$a}}, $a; next; } my $i = 0; foreach my $b (split('-', $a)) { foreach my $c (keys %{ $hash_ref }) { $i += $foo->{$b}->{$c}->{'value'}; } } $scored{$a} = $i; push @{ $bar->{$i} }, $a; }