package Item; sub new{ ....... my $accessors = { team => "getter", status => "setter", }; for my $name (keys %{$accessors}){ # Defines read-write access to a DB column. my $setter = sub { my $s = shift; # Setting of value requested. if( @_ ){ ...... ...... $self->{$name} = $value; } return $self->{$name}; }; my $getter = sub { my $s = shift; if( @_ ){ carp("Attempting to set value $_[0] for read-only var $name!\n"); } return $self->{$name}; }; no strict 'refs'; if( $accessors->{$name} eq "setter" ){ *$name = $setter; }else{ *$name = $getter; } return $self; }