- 追加された行はこの色です。
- 削除された行はこの色です。
package AutoloadAccessor;
RIGHT:[[:t/コード]]
use base qw{Exporter};
our @EXPORT = qw{_Recompose _Do};
package AutoloadAccessor;
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";
}
}
use base qw{Exporter};
our @EXPORT = qw{_Recompose _Do};
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";
}
# 戻値が変わってしまうので、これ以上コードを書けない。
}
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";
}
}
1;
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
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 .. $#_]);
return if our $AUTOLOAD =~ /::DESTROY$/;
die unless not $AUTOLOAD =~ /::_Recompose$/;
_Recompose($_[0], $AUTOLOAD, @_[1 .. $#_]);
}
=cut