Perl排序散列并覆盖/添加到新变量

Perl排序散列并覆盖/添加到新变量,perl,hash,Perl,Hash,我对perl非常陌生,需要找到一种对哈希进行排序的方法。许多示例将运行排序,然后只打印到控制台。我需要新的哈希变量包含按排序的键 例如: my %planets = ( Mercury => 0.4, Venus => 0.7, Earth => 1, ); foreach my $name (sort keys %planets) { printf "this $name \n"; } 我的意思是,我需要将它引用回另一个变

我对perl非常陌生,需要找到一种对哈希进行排序的方法。许多示例将运行排序,然后只打印到控制台。我需要新的哈希变量包含按排序的键

例如:

my %planets = (
  Mercury => 0.4,
  Venus   => 0.7,
  Earth   => 1,
);
 
foreach my $name (sort keys %planets) {
    printf "this $name \n";
}
我的意思是,我需要将它引用回另一个变量,甚至是
%plants
本身,而不是打印

因此,我预期的最终哈希将是

%new_hash = (
    Earth => 1,
    Mercury => 0.4,
    Venus => 0.7
);

你不能。没有排序散列这样的东西


没有任何说明您必须迭代
sort
的结果。您可以将其存储在阵列中以供以后使用

my@sorted_keys=排序键(%1);

另一种可能是在排序时转换正在使用的数据结构

my@sorted\u行星=
地图{[$},$行星{$}]}
排序键(%);
这将产生:

my@sorted\u行星=(
[地球=>1],
[汞=>0.4],
[金星=>0.7],
);
我需要新的哈希变量包含按排序的键。它不是按
值排序吗?根据这个“按字母顺序排序”显示,我们可以按键排序。我需要知道如何引用它或将其置于新的哈希下。