my @k1 = keys(%hash1); my @k2 = keys(%hash2); # do they have the same number of elements? if (@k1 != @k2) { # they're different... } # are the keys the same? if ((join $; , sort @k1 ) ne join $; , sort @k2)) { #they're different } # are the values the same? if ( scalar grep { $hash1{$_} ne $hash2{$_} } @k1 ) { #they're different }