use List::Compare::Functional qw(get_unique get_complement); sub hashesEqual { my ($have, $want) = @_; my @keysHave = sort keys %$have; my @keysWant = sort keys %$want; my @haveOnly = get_unique ([\@keysHave, \@keysWant]); my @wantOnly = get_complement ([\@keysHave, \@keysWant]); if (@haveOnly) { warn 'Unexpected parameters ' . (join ',', @haveOnly) . " for email send\n"; return; } if (@wantOnly) { warn 'Expected parameters ' . (join ',', @haveOnly) . " missing for email send\n"; return; } my $ok = 1; for (@keysHave) { next if $have->{$_} eq $want->{$_}; $ok = undef; warn "Email send parameter $_ expected '$want->{$_}', got '$have->{$_}'\n"; } return $ok; }