我有一个HoH数据结构.外层哈希的键是数字的 - 所以我想转储由第一个哈希键数字排序的HoH(不关心内部哈希的顺序).我一直在尝试不同的Sortkeys潜艇......
use Data::Dumper; #$Data::Dumper::Sortkeys = sub { [sort { $a <=> $b } (keys %{$_[0]})] }; ## A $Data::Dumper::Sortkeys = sub { [sort { $a <=> $b } keys %$_ ] }; ## B print Dumper(\%dsCmdBlocks);
我似乎无法在Sortkeys子例程中找到正确的语法,它将以数字方式转储由第一个键排序的HoH.当我尝试"A"时,它对第一个键进行排序很好,但它也吐出错误消息,说内部参数不是数字(这是由于使用了[0].所以"A"不是这是正确的方法.但我似乎无法在我的生活中弄清楚如何仅对第一个哈希进行排序.顺便说一下 - 当我通过一个正常的foreach循环发送HoH时:
foreach my $sk (sort {$a<=>$b} keys %dsCmdBlocks) { print "KEY: $sk\n"; }
它按预期工作.
那么如何将我的Sortkeys子设置为仅对第一个哈希键进行排序?
回调用于$Data::Dumper::Sortkeys
对数据结构中的任何哈希引用进行操作.所以你可以强化你的排序例程来对抗非数字输入,比如
$Data::Dumper::Sortkeys = sub { no warnings 'numeric'; [ sort { $a <=> $b } keys %{$_[0]} ] };
或者应用其他一些阴谋来看看你的输入是什么样的
$Data::Dumper::Sortkeys = sub { my $data = join '', keys %{$_[0]}; if ($data =~ /[A-Za-z]/) { # for example # input is not numeric return [keys %{$_[0]}]; } else { return [ sort { $a <=> $b } keys %{$_[0]} ]; } };