package AutoloadAccessor;
use base qw{Exporter}; our @EXPORT = qw{_Recompose _Do};
sub _Recompose { my $self = shift; my($autoload, @value) = @_; my($method, $field) = $autoload =~ m/(=?Fetch|Store|Execute)_(\w+)/; if (defined $method and defined $field and $self->can("${method}_${field}")){ return $self->_Do($method, $field, @value); } else { die "Undefind method \"$autoload\".\n"; } }
sub _Do { my $self = shift; my($method, $field, @value) = @_; if ($method eq 'Fetch'){ $self->{$field}; } elsif ($method eq 'Store'){ $self->{$field} = $value[0]; } elsif ($method eq 'Execute'){ do $self->{$field}; } else { die "Undefind method \"${method}_${field}\".\n"; } # 戻値が変わってしまうので、これ以上コードを書けない。 }
1;
=DESCRIPTION
use subs qw{
Store_Id Fetch_Id
Store_Ethernal Fetch_Ethernal
Store_Owner Fetch_Owner
};
use AutoloadAccessor;
sub AUTOLOAD
{
return if our $AUTOLOAD =~ /::DESTROY$/;
die unless not $AUTOLOAD =~ /::_Recompose$/;
_Recompose($_[0], $AUTOLOAD, @_[1 .. $#_]);
}
=cut