我还在学习Perl,所以可能有一种更有效的方法.我正在尝试使用哈希值,将其反转为$ values => $ keys,获取新键(旧值)然后对这些键进行排序.
这是有问题的代码:
foreach my $key (sort keys reverse %hash){
...}
Run Code Online (Sandbox Code Playgroud)
我期待发生的是反向%hash将返回一个哈希类型,这是键正在寻找的.但是,我收到以下错误:
arg 1到键的类型必须是哈希(不是反向)
我已经尝试在反向%哈希周围加上括号,但仍然得到相同的东西.
任何想法为什么这不起作用?
Perl函数可以返回标量值或列表; 没有明确的散列返回类型(您可以return %hash从子例程调用,但Perl隐式地从散列中展开键值对并将它们作为列表返回).
因此,返回值reverse %hash是一个列表,而不是一个哈希,并且不适合用作参数keys.您可以强制Perl将此列表解释为具有强制转换的哈希%{{}}:
foreach my $key (sort keys %{{reverse %hash}}) { ...
Run Code Online (Sandbox Code Playgroud)
您还可以通过说明对哈希值进行排序
foreach my $key (sort values %hash) { ...
Run Code Online (Sandbox Code Playgroud)
使用values %hash与使用略有不同keys %{{reverse %hash}},keys %{{reverse %hash}}不会返回任何重复值.