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

Re: Diff on hashes

by rinceWind (Monsignor)
on Nov 13, 2002 at 11:33 UTC ( #212557=note: print w/replies, xml ) Need Help??

in reply to Diff on hashes

Hi Hotshot,

A few months ago, I posted Need a test for deep equality. My requirements were rather more exacting than yours, but the discussion is pertinent. As the order of keys in a hash is arbitrary, I discovered a lack of canonical hash ordering in Data::Dumper. This may have been fixed.

In the end, the module that fever pointed out, the obscurely named Class::MakeMethods::Utility::Ref matched my requirement best. I did find an issue with code refs, as I was doing clever stuff with persisting and reconstituting them - I made a small change to the 'Ref' code to deparse coderefs and compare the deparse. However, I digress.

What does your code need to know? Is it just a boolean condition - telling the server to restart, or do you want a breakdown of the differences? To get a list of differences, I would suggest transforming the hashes into canonicalized arrays, and using Array::Compare or Algorithm::Diff.

Warning: untested code

sub canonical_list (%) { my $in = shift; map {$_,$in->{$_}}, sort keys %$in; }

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2023-02-05 23:37 GMT
Find Nodes?
    Voting Booth?
    I prefer not to run the latest version of Perl because:

    Results (33 votes). Check out past polls.