package Person;
use strict;
sub new {
my $type = shift;
my $class = ref $type || $type;
my $self = {
NAME => undef,
AGE => undef
};
####
my $closure = sub {
my $field = shift;
@_ and $self->{$field} = shift;
$self->{$field};
};
##
##
bless $closure, $class;
$closure;
}
##
##
sub name { &{ $_[0] }("NAME", @_[1 .. $#_ ] ) }
sub age { &{ $_[0] }("AGE", @_[1 .. $#_ ] ) }
##
##
use strict;
use Person;
my $person = new Person;
$person->name("Foo Bar");
$person->age(22);
print $person->name, " is ", $person->age, " years old.\n";