Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: How do I test the deep equality of two hash tables?

by Roy Johnson (Monsignor)
on Nov 03, 2003 at 21:29 UTC ( #304250=note: print w/replies, xml ) Need Help??

in reply to How do I test the deep equality of two hash tables?

This does all the straightforward tests, and warns and returns undef on stuff it can't reliably compare (like code refs). Would probably be better to use UNIVERSAL::isa rather than ref.
sub deep_eq { my ($a, $b) = @_; if (not defined $a) { return not defined $b } elsif (not defined $b) { return 0 } elsif (not ref $a) { $a eq $b } elsif ($a eq $b) { return 1 } elsif (ref $a ne ref $b) { return 0 } elsif (ref $a eq 'SCALAR') { $$a eq $$b } elsif (ref $a eq 'ARRAY') { if (@$a == @$b) { for (0..$#$a) { my $rval; return $rval unless ($rval = deep_eq($a->[$_], $b->[$_ +])); } return 1; } else { return 0 } } elsif (ref $a eq 'HASH') { if (keys %$a == keys %$b) { for (keys %$a) { my $rval; return $rval unless ($rval = deep_eq($a->{$_}, $b->{$_ +})); } return 1; } else { return 0 } } elsif (ref $a eq ref $b) { warn 'Cannot test '.(ref $a)."\n"; un +def } else { return 0 } }

Log In?

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

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

    Results (33 votes). Check out past polls.