如何让Data::Printer输出按哈希值数值排序而非默认按键字母排序
解决方案
你使用的sort_methods参数是Data::Printer专门用于控制对象/类的方法列表排序规则的,哈希键的自定义排序需要使用sort_keys配置项。
正确的代码写法如下:
#!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use autodie ':default'; use DDP {output => 'STDOUT', show_memsize => 1}; my %h = ( 'a' => 0, 'b' => 7, 'c' => 5 ); # sort_keys 回调的入参为待打印的哈希引用 p %h, sort_keys => sub { my $hash = shift; # 按哈希值降序排序 sort { $hash->{$b} <=> $hash->{$a} } keys %$hash; };
运行后输出符合预期:
{ b 7, c 5, a 0 } (425B)
如果需要全局生效该排序规则,可以在导入DDP时直接配置:
use DDP { output => 'STDOUT', show_memsize => 1, sort_keys => sub { my $h = shift; sort { $h->{$b} <=> $h->{$a} } keys %$h } };
后续所有p调用打印哈希时都会默认按值降序排序。
内容的提问来源于stack exchange,提问作者con
相关产品推荐
相关产品推荐

