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 }