my @names_and_rates = map { [ $_->{name}[0], $_->{data}[0] ], [ $_->{name}[1], $_->{data}[1] ] } @alldata; #### @names_and_rates = ( [ name1, rate1], [name2, rate2], ... ); #### my @final_list = sort { $b->[1] <=> $a->[1] } @names_and_rates; # $b first for descending order #### my @final_list = sort { #sort stuff } map { #map stuff } @alldata; #### print "File\t\tRate\n"; foreach (@final_list[0 .. $n-1] ) { print $_->[0], "\t\t", $_->[1], "\n"; }