package some_package; ... { my %simple_data = ( 'name' => 1, 'age' => 1, ... } sub AUTOLOAD { my $self = shift; (my $method) = $AUTOLOAD) =~ s/.*:://; return if $method eq 'DESTROY'; if ( exists $simple_data{$method} ) { if ( defined $_[0] ) { $self->{$method} = $_[0]; } return $self->{$method}; } } } #### package some_package; ... { BEGIN { my @simple_data = qw(name age ...); no strict 'refs'; foreach my $data (@simple_data) { *{$data} = sub { my $self = shift; my ($value) = @_; if ( defined $value ) { $self->{$data} = $value; } return $self->{$data}; } } use strict; }