http://qs321.pair.com?node_id=160859


in reply to Need a test for deep equality

Update: What I didn't specify, but perhaps should have, is that parts of the data structure are blessed object references, and I want to compare the guts of the objects.

Conclusion:

ModuleConclusion
Data::DumperHashes not consistently serialised
Test::MoreOnly does a shallow comparison.
Tie::IxHashSolves a different problem. Anonymous hashes cannot be tied
FreezeThawOnly copes with shallow structures
Struct::CompareDoes not handle references
Recursive comparison by thraxilDoes not handle object references
Data::CompareDoes not handle references

Conclusion: either fix Data::Dumper or roll my own compare routine :-<.

Update 2: I have been looking further at Test::More. There are numerous versions floating about, owing to the way in which people have used it to package up their tests in their own modules.

The definitive Test::More on CPAN has a function eq_hash, which suffers from the same syndrome as Data::Dumper when it comes to ordering of keys.

Update 3: simonm++ The module Class::MakeMethods::Utility::Ref does the business! Shame about the name - something as useful should not IMO have a module name 4 levels down, with no clue as to what it can do.

Replies are listed 'Best First'.
Re: Re: Need a test for deep equality
by thor (Priest) on Apr 21, 2002 at 18:36 UTC
    I have to wonder if you could canoncalize the hashes. A simple "alphabetize the keys at each level" comes to mind. This could be expensive for large/deep hashes, but, it may be worth it to you.
Re^2: Need a test for deep equality
by Anonymous Monk on Aug 01, 2020 at 12:57 UTC

    This is an old thread, which is probably the reason for this omission, but... Test::More has an is_deeply() that works for my purposes (no object references). The docs for Test::More also recommend other Perl modules that will handle object references, etc.