my @sorted = map $_->[0], sort { $a->[0]->{val} <=> $b->[0]->{val} or $a->[1] <=> $b->[1] } map [ $assorted[$_] => $_ ], 0 .. $#assorted ;