use strict; use warnings; use 5.022; # use Data::Dumper; my %data = ( car => 180, motorcycle => 150, skate => 150, bird => 120, ); my %byValue; push @{ $byValue{ $data{ $_ } } }, $_ for keys %data; # print Data::Dumper->Dumpxs( [ \ %byValue ], [ qw{ *byValue } ] ); my $rank; for my $descVal ( sort { $b <=> $a } keys %byValue ) { $rank ++; say qq{$rank - $_} for sort @{ $byValue{ $descVal } }; }