Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

•Re: Data::XDumper

by merlyn (Sage)
on Feb 16, 2003 at 16:21 UTC ( [id://235743]=note: print w/replies, xml ) Need Help??


in reply to Data::XDumper

Are you reinventing YAML for any particular reason? And YAML has cross-platform support: you can spit out a data structure in Python, and read it back in Perl.

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.

Replies are listed 'Best First'.
Re: Data::XDumper
by xmath (Hermit) on Feb 16, 2003 at 16:29 UTC
    I'm not trying to reinvent YAML in any way. I'm not interesting in serializing data structure, nor reading them in in different languages.

    I want an accurate dump of perl data structures. Neither Dumper nor Denter offer this, and I doubt YAML does either (although I haven't checked really - feel free to correct me)

    an example which shows where Dumper and Denter go wrong:
    http://tnx.nl/scribble/420FRAP
    how would YAML handle that?

    •Update: the above link died.. so here it is, expanded to include other dumping formats mentioned also:

      So, if the problem is that Data::Dumper dumps some structures wrong, then submit a patch to Data::Dumper, rather than inventing something different that a lot of people won't know about and leaving the buggy code in a core distribution.

      As for your example:

      $x = 4; $xx = sub{\@_}->(\$x, \$x); $y = \4; $yy = sub{\@_}->($y, $y); bless \$xx->[0], 'Foo'; bless \$xx->[1], 'Bar'; bless \$yy->[0], 'Foo'; bless \$yy->[1], 'Bar'; use Data::Dumper; print Dumper $xx, $yy;
      I suspect you haven't seen the Purity flag, which needs to be set in some more complex data, such as yours.

      -- Randal L. Schwartz, Perl hacker
      Be sure to read my standard disclaimer if this is a reply.

        So, if the problem is that Data::Dumper dumps some structures wrong, then submit a patch to Data::Dumper, rather than inventing something different that a lot of people won't know about and leaving the buggy code in a core distribution.

        The same could be said of YAML and of Data::Dump and of Data::BFDump and of Data::DumpXML.

        Actually of them all Data::Dumper is the most accurate. (Data::BFDump is more accurate, but im not sure which version I have on CPAN. I think the one there is broken. Ive been meaning to update it for quite a while.)

        YAML is IMO the most broken. I have done comparison tests and it fails more than everything else. Please dont recommend YAML to people without a big caveat that it shouldnt be used on self referential structures.

        Ps: You once said more or less the same thing to me about eval(). :-)

        • Update:  
        Point taken about reinventing the wheel though. If you are going to do so, you need to put a lot of work in to make it really a better wheel.

        • Update:  
        Minor typographical changes.

        ---
        demerphq


        They're not really bugs.. they're more like design choices. There is no way to fix it except by radically changing its output format in an incompatible way. It's simply that Dumper's goal of eval-ability is in the way.

        And I also heavily dislike its output format :-)

        BTW, Dumper's purity flag has no effect in this case besides making the output even more unreadable

      To answer my own question, YAML::Dump handles it very poorly.

      Like Dumper and Denter, it doesn't see the difference between $xx and $yy. It also appears to ignore blessings, which I find rather difficult to believe.

      Plus if I feed it a bit more complex structure (the example I included with XDumper), YAML gives me: Can't create YAML::Node from 'GLOB' at /Library/Perl/YAML/Transfer.pm line 41

      So I don't think YAML can be compared to XDumper. They simply have different goals and different advantages.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (3)
As of 2024-04-25 09:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found