首页 > 解决方案 > 如何对 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)

但顺序应该是b, c, 然后a。奇怪的是,没有错误消息。

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

标签: perlprinting

解决方案


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

哈希有一个sort_keys选项,但它决定了“打印哈希内容时是否对键进行排序”。它默认为1,并且没有提到设置顺序的方法。测试确认提供 sub 不提供提供排序顺序的方法。

$ 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.

推荐阅读