package MyClass; use base qw(Class::Accessor); sub set { my ($self, $field, $value) = @_; my %VALID = ( fname => qr/^[\w-]+$/, ); if (defined $VALID{$field}) { if (ref $VALID{$field} eq 'Regexp') { if ($value =~ $VALID{$field}) { $self->{$field} = $value; } else { die "Invalid value '$value'\n"; } } else { die "Unknown VALIDATOR"; } } } __PACKAGE__->mk_accessors(qw(fname));