Лучший способ сделать это - использовать систему сериализации с глубокой структурой, такую как 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;