my $guy = Person->new({name => 'Bubba'}); print "name: ", $guy->get_name, "\n"; $guy->set_name('Gump'); print "name: ", $guy->get_name, "\n"; package Person; use Class::Std; { my %name_of :ATTR; sub BUILD { my ($self, $ident, $arg_ref) = @_; $name_of{$ident} = $arg_ref->{name}; return; } sub get_name { my $self = shift; return $name_of{ident $self}; } sub set_name { my ($self, $new_name) = @_; $name_of{ident $self} = $new_name; return; } } #### my $guy = Person->new({name => 'Bubba'}); print "name: ", $guy->get_name, "\n"; $guy->set_name('Gump'); print "name: ", $guy->get_name, "\n"; package Person; use Class::Std; { my %name_of : ATTR(init_arg => 'name', get => 'name', set => 'name'); } #### Can't locate object method "get_name" via package "Person" at ./oop.pl line 4 #### :init_arg :get :set