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

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 contemplating the Monastery: (5)
As of 2023-03-23 15:04 GMT
Find Nodes?
    Voting Booth?
    Which type of climate do you prefer to live in?

    Results (60 votes). Check out past polls.