# Assumes %user_scores is map: UserName => score my %users_by_score = (); push @{$users_by_score{$user_scores{$_}}}, $_ for keys %user_scores; my $rank = 1; foreach my $rank_score (reverse sort keys %users_by_score) { print $rank++, '. ', join(', ', @{$users_by_score{$rank_score}}), ' - ', $rank_score, "\n" }