Вы должны удалить атрибуты Height and Width
из Grid
и WrapPanel
.
Лучший способ сделать это должно использовать систему сериализации глубинной структуры как Storable. Две структуры с теми же данными произведут тот же блоб вывода Storable, таким образом, они смогут быть сравнены.
#!/usr/bin/perl
use strict;
use warnings;
use Storable ('freeze');
$Storable::canonical = 1;
my $one = { foo => 42, bar => [ 1, 2, 3 ] };
my $two = { foo => 42, bar => [ 1, 2, 3 ] };
my $one_s = freeze $one;
my $two_s = freeze $two;
print "match\n" if $one_s eq $two_s;
... И доказать инверсию:
$one = [ 4, 5, 6 ];
$one_s = freeze $one;
print "no match" if $one_s ne $two_s;
Я думаю, что Вы ищете, хеш-функция. Я рекомендовал бы подход как это:
use Storable;
$Storable::canonical = 1;
sub ds_to_sig {
my $structure = shift;
return hash(freeze $structure);
}
Функциональный хеш может быть любой хеш-функцией, например, функция md5 из Обзора:: MD5
Используйте Storable:: nstore, чтобы превратить его в двоичное представление и затем вычислить контрольную сумму (например, с модулем Обзора).
Оба модуля являются базовыми модулями.
Digest::MD5->new->add(
Data::Dumper->new([$structure])
->Purity(0)
->Terse(1)
->Indent(0)
->Useqq(1)
->Sortkeys(1)
->Dump()
)->b64digest();
Разве Вы не можете использовать объект вместо структуры? Тем путем Вы видели, является ли объект экземпляром типа, не имея необходимость сравнивать хеши и т.д.
Я думаю слово, которое Вы ищете, "хеширует".
В основном Вы проводите свою структуру данных через функцию, которая генерирует довольно уникальное значение от нее. Это значение было бы Вашим signiture.