use strict; use warnings; use 5.022; my %data = ( car => 180, tortoise => 90, concorde => 300, motorcycle => 150, bird => 120, skate => 150, pedestrian => 100, rocket => 300, aeroplane => 210, unicycle => 175, sheep => 100, frog => 120, cow => 110, bus => 150, ); my %byValue; push @{ $byValue{ $data{ $_ } } }, $_ for keys %data; say q{Rank Place Item}; my $rank = 0; my $place = 1; for my $descVal ( sort { $b <=> $a } keys %byValue ) { $rank ++; my $count = scalar @{ $byValue{ $descVal } }; my $eq = $count > 1 ? q{=} : q{ }; printf qq{%3d%5d%1s %s\n}, $rank, $place, $eq, $_ for sort @{ $byValue{ $descVal } }; $place += $count; }