my @b = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ $a[ $_ ]->{total}, $_ ] } 0..$#a; #### $a[0]->{total} = 0; $a[1]->{total} = 10; $a[2]->{total} = 50; $a[3]->{total} = 40; $a[4]->{total} = 30; $a[5]->{total} = 20; @b = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ $a[$_]->{total}, $_ ] } 1..$#a; print "$b[$_] = $a[$b[$_]]->{total}\n" for 0..$#b;