http://qs1969.pair.com?node_id=236731

Jenda has asked for the wisdom of the Perl Monks concerning the following question:

Does anyone know an easy way (a module or something) to compare two data structures (iregular HoHoA)? I don't need to get the differences printed to anywhere all I'd need is to be able to test whether $A contains all the data in $B (I don't mind if $A contains some more fields).

I'd like to add a few tests to XML::DTDParser and to me the easiest solution seems to be to (when creating the tests) parse a few DTDs, dump the results to files with Data::Dumper and then the tests will try to parse the same DTDs again and see if they get the same results.

Thanks, Jenda

  • Comment on Compare data structures (without loops)

Replies are listed 'Best First'.
Re: Compare data structures (without loops)
by jasonk (Parson) on Feb 19, 2003 at 17:45 UTC

      Thanks. I know I should have looked into CPAN. I was sure to find many so I was hoping for an "I'm using this one and am happy with it" type of response. :-)

      Data::Compare looks slightly better (though neither seems to care about loops), so I'll take that one as the basis. As I said I need/want something a little different. I don't need $struct1 == $struct2, but something like $struct1 <= $struct2.

      That is "Do all hashes in $struct2 contain all the keys as those in $struct1 and with the same values? Do all arrays in $struct2 have at least as many items and those in $struct1 and do those have the same values? I don't mind if the hashes in $struct2 contain additional keys or the arrays have more item.

      I have this implemented (will then send my additions to the Data::Compare's author), but I can't think up a decent name for the function. During the development I used CompareX(), but that doesn't say anything about what it does. Does anyone have a suggestion?

      Jenda

        Maybe contains_at_least? I can't think of any better name..

        Makeshifts last the longest.