If I'm understanding what you are going for, I'd use a hash of arrays of hashes. That way you keep all of the data and can easily find 'duplicated keys':
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
use Data::Printer;
my %hash = (
alpha1 => [
{ beta => { gamma => 'theta', delta => 'lambda', } },
{ beta => { gamma => 'zeta', } },
],
alpha2 => [
{ beta => { gamma => 'theta', delta => 'lambda', } },
],
);
say "## Original state:";
check_duplication();
push @{ $hash{alpha2} }, { beta => { gamma => 'theta', } };
say "## After pushing another element onto 'alpha2':";
check_duplication();
sub check_duplication {
for ( keys %hash ) {
if ( scalar @{ $hash{$_} } > 1 ) {
say "$_ has a duplicate.";
}
else {
say "$_ is unique.";
}
}
}
p %hash;
OUTPUT:
{
alpha1 [
[0] {
beta {
delta "lambda",
gamma "theta"
}
},
[1] {
beta {
gamma "zeta"
}
}
],
alpha2 [
[0] {
beta {
delta "lambda",
gamma "theta"
}
},
[1] {
beta {
gamma "theta"
}
}
]
}
## Original state:
alpha2 is unique.
alpha1 has a duplicate.
## After pushing another element onto 'alpha2':
alpha2 has a duplicate.
alpha1 has a duplicate.