You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:18:02