#!c:\perl\bin\perl.exe -w use strict; use warnings; use diagnostics; my @a; $a[1]{total} = 10; $a[2]{total} = 50; $a[3]{total} = 40; $a[4]{total} = 30; $a[5]{total} = 20; my @b = map { $_->[1] } sort { $b <=> $a } map { [ $a[ $_ ]->{total}, $_ ] } 0..$#a; for my $x (0..$#b) { print "$b[$x] = $a[$b[$x]]{total}\n"; }