如何对 Data::Printer 的输出进行排序?

How to sort output from Data::Printer?

我正在尝试对 Data::Printer 的输出进行排序,但没有成功。 我想按值按数字排序,而不是按字母顺序键(默认)。

灵感来自 How do you sort the output of Data::Dumper? 我猜 Data::Printer 的 sort_methods 与 Data::Dumper 的 Sortkeys 类似:

#!/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
);
p %h, sort_methods => sub { sort {$_[0]->{$b} <=> $_[0]->{$a}} keys %{$_[0]} };

但这会打印出来

{
    a   0,
    b   7,
    c   5
} (425B)

但顺序应该是bc,然后是a。 奇怪的是,没有错误信息。

如何按哈希值对 Data::Printer 的输出进行排序?

您没有倾倒对象,因此 sort_methods 不适用。如果是这样,“此选项将按字母顺序排列它们”。

散列有一个sort_keys选项,但它决定了“打印散列内容时是否对键进行排序”。它默认为 1,并且没有提及设置顺序的方法。一项测试证实,提供子项并不能提供提供排序顺序的方法。

$ perl -e'use DDP; p {a=>5}->%*, sort_keys => sub { };'
[Data::Printer] 'sort_keys' property must be a scalar, not a reference to CODE at -e line 1.