I like to use AUTOLOAD for my accessors like:
sub AUTOLOAD {
my $self = shift;
return unless ref($self);
# lets find out what the mysterious missing func is
my ($attribute) = $AUTOLOAD =~ m/.*::(.*)/;
# this is our psuedo get/set
# we can make this as simple or complex as we want
if( my $value = shift ){ ### we have an argument
# if attribute exists
# this is our sort of rudimentary access control
# so we can't create arbitrary attributes
if( exists $self->{$attribute} ){
$self->{$attribute} = $value;
}elsif( exists $self->{ lc($attribute) } ){
# double check caller didn't mean lower case
$self->{ lc($attribute) } = $value;
}else{
# we can put assignment code here if
# we want to be able to automatically
# create object attributes on the fly
}
# here is a good place to call your commit()
# or write() method if applicable
$self->write();
}else{ # must be an get type call
return $self->{$attribute} if exists $self->{$attribute};
return $self->{lc($attribute)} if exists $self->{lc($attribute)};
}# end if/elsif/else value = shift
}
Update: BrentDax is spot on
"Never be afraid to try something new. Remember, amateurs built the ark. Professionals built the Titanic."