my %foo; tie %foo, 'My::SpecialValidator'; sub bar : lvalue { $foo{bar}; } package My::SpecialValidator; sub STORE { my ($class, $attr, $value); if ($attr eq 'bar' && $value !~ /^\d$/) { # exception. } ... }