Я не знаю, есть ли простой способ или встроенный пакет, и я не знаю, что происходит, когда вы просто делаете %hash1 == %hash2
(но это, вероятно, не так), но это не очень сложно свернуть ваш собственный:
sub hash_comp (\%\%) {
my %hash1 = %{ shift };
my %hash2 = %{ shift };
foreach (keys %hash1) {
return 1 unless defined $hash2{$_} and $hash1{$_} == $hash2{$_};
delete $hash1{$_};
delete $hash2{$_};
}
return 1 if keys $hash2;
return 0;
}
Не проверено, но должно возвращать 0, если хеши имеют все одинаковые элементы и одинаковые значения. Эту функцию нужно будет модифицировать для учета многомерных хэшей.
Если вы хотите что-то из стандартного дистрибутива, вы можете use Data::Dumper;
и просто сбросить два хэша в две скалярные переменные, а затем сравнить строки на равенство. Это может сработать.
В CPAN есть также пакет под названием FreezeThaw
, который выглядит так, как будто он делает то, что вам нужно.
Обратите внимание, что для использования умного совпадения (здесь оно не повторяется, поскольку оно уже опубликовано), вам потребуется use feature;
, и оно доступно только для Perl 5.10. Но кто все еще использует Perl 5.8.8, верно?