Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: sortkeys for Data::Dump

by rjt (Deacon)
on Jul 22, 2013 at 00:04 UTC ( #1045547=note: print w/ replies, xml ) Need Help??


in reply to sortkeys for Data::Dump

There is no analogous method, because Data::Dump sorts the keys by default. (Confirmed by inspection of Data/Dump.pm.)

#!/usr/bin/env perl use 5.012; use warnings; use Data::Dump qw/dump/; my $data = { key1 => 'foo', key2 => 3, key0 => 'bar', }; dump $data;

Output:

{ key0 => "bar", key1 => "foo", key2 => 3 }

If you need to customize the sort subroutine, however, you will need to hook into Data::Dump::Filtered. You did not specify which usage you need, but you supplied empty arguments to Sortkeys() in your OP, so I'll assume the former for now.


Comment on Re: sortkeys for Data::Dump
Select or Download Code
Re^2: sortkeys for Data::Dump
by Anonymous Monk on Jul 22, 2013 at 00:27 UTC

    ...

    Thanks, I know :)

    ... hook ...

    I don't think so, I think a patch is in order, but I give up

      ... hook ...

      I don't think so

      Have a little faith. :-)

      Easily extendable to support arbitrary sort subs, or even context-sensitive sorts.

      my $dump = dumpf($data, sub { use List::Util qw/max/; my ($ctx, $obj) = @_; my %r; state %seen; if ('HASH' eq ref $obj and not $seen{$obj}++) { no warnings 'uninitialized'; # Unknown sort keys my $len = max map { length } keys $obj; # Keep results aligned my $sort_string = 'a' x max map { length } keys $obj; # Convert existing keys to ...aaaaa, ...aaaab, ...aaaac, etc., # so Data::Dump's lexical sort works. my %keymap = map { $sort_string++ => $_ } sort { $num{$a} <=> $num{$b} } keys $obj; $obj->{$_} = delete $obj->{$keymap{$_}} for keys %keymap; my $dump = Data::Dump::dump($obj); # Replace to get original keys back $dump =~ s/$_/sprintf "%-${len}s",$keymap{$_}/e for keys %keym +ap; $r{dump} = $dump; } return \%r; });

      Full example

      Output:

      { unknown => "unknown key", one => "first", two => { one => "the", six => "inner", seven => "hash", eight => "works", nine => "too", }, three => "third", }

      I think a patch is in order,

      Not a bad idea, either.

        Have a little faith. :-)

        Eeeew talk about twisted hooks :)

        But that's what I ended up doing (recurse my own specific dumper) , easier to laser-focus that way

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1045547]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (10)
As of 2014-10-02 13:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    What is your favourite meta-syntactic variable name?














    Results (59 votes), past polls