my(%hash); tie %hash, 'MyTiedHash'; $hash{a} = 'goodvalue'; # works $hash{b} = 'badvalue'; # error package MyTiedHash; use Tie::Hash; use Carp; use base qw(Tie::StdHash); sub STORE { my($me,$key,$value) = @_; if($value eq 'goodvalue'){ $me->{$key} = $value; }else{ croak("$value not a good value for $key"); } return 1; }