#!/usr/bin/perl # http://perlmonks.org/?node_id=1207623 use strict; use warnings; my %data = ( 'car' => 180, 'motorcycle' => 150, 'skate' => 150, 'bird' => 120, ); my ($n, %rank) = 1; $rank{ $data{$_} + 0 } .= "$_\n" for sort keys %data; $n += print s/^/$n - /gmr for @rank{ sort { $b <=> $a } keys %rank };