=item B eq_hash_skip(\%this, \%that, \@keys_to_ignore); Determines if the two hashes contain the same keys and values, not counting any hash keys in the list of keys to ignore. This is a deep check. Note that the list of keys to ignore is only considered against the top level hashes. Deeper structures must match exactly. If the list of keys to ignore is missing or empty, this is identical to eq_hash. =cut sub eq_hash_skip { my ($a1, $a2, $skip) = @_; return eq_hash($a1, $a2) unless (defined($skip) && @$skip); return 1 if $a1 eq $a2; my %keys_of_interest = map {($_, 1)} keys %$a1, keys %$a2; delete @keys_of_interest{@$skip}; my $ok = 1; foreach my $k (keys %keys_of_interest) { return 0 unless exists $a1->{$k}; return 0 unless exists $a2->{$k}; my($e1, $e2) = ($a1->{$k}, $a2->{$k}); $ok = _deep_check($e1, $e2); last unless $ok; } return $ok; }