sub name :lvalue { shift->name }
# and later
$object->name =
[qw/ random unvalidated value which breaks encapsulation /];
####
sub name {
my $self = shift;
return $self->{name} unless @_;
$self->{name} = shift;
return $self;
}
##
##
sub set_name {
my $self = shift;
croak "set_name() requires a name, silly!" unless @_;
$self->{name} = shift; # insert other validation here
}
##
##
$object->name($name);
$object->age($age);
$object->id($id); # huh?
##
##
$object->set_name($name);
$object->set_age($age);
$object->set_id($id); # huh?