What about tie?
#!/usr/bin/perl { package AssignOnce; use strict; use warnings; use Carp (); use Tie::Hash; use parent -norequire => 'Tie::StdHash'; # why, oh why, is Tie::St +dHash hidden in Tie::Hash? sub STORE { my ($self,$key,$value)=@_; if (exists $self->{$key}) { Carp::carp("Overwriting hash key '$key', old value: '$self +->{$key}', new value: '$value'"); } $self->SUPER::STORE($key,$value); } } use strict; use warnings; use Data::Dumper; our %h; tie %h,'AssignOnce'; %h=( one => 1, two => 2, one => 3, ); print Dumper(\%h);
Result:
Overwriting hash key 'one', old value: '1', new value: '3' at tie.pl l +ine 29 $VAR1 = { 'one' => 3, 'two' => 2 };
Alexander
In reply to Re: Throw compilation error(or warning) if duplicate keys are present in hash
by afoken
in thread Throw compilation error(or warning) if duplicate keys are present in hash
by I_love_perl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |