Самый короткий способ - использовать List :: UtilsBy , который внутренне выполняет преобразование Шварца для большинства своих функций.Однако в этом случае он, вероятно, будет медленнее, потому что доступ к хешу быстрый, и он добавляет дополнительные издержки по сравнению со стандартным sort ().Случай, когда это может быть быстрее, если вы сортируете, например, по результату медленного вызова подпрограммы.
use strict;
use warnings;
use List::UtilsBy 'nsort_by';
my %hash = (
name => {
pos => 1
},
name_xxx => {
pos => 2
},
name_yyy => {
pos => 3
},
);
my @sorted_keys = nsort_by { $hash{$_}{pos} } keys %hash;