rendered paste bodypackage Wrapper;
sub new {
my($self, $wrapped) = @_;
bless { wrapped => $wrapped }, $class;
}
sub AUTOLOAD {
my $self = shift;
our($AUTOLOAD) =~ s/.*:://o;
my $method = $self->{wrapped}->can($AUTOLOAD);
if($method) {
unshift @_, $self->{wrapped};
goto $method;
}
else {
# メソッドが存在しない場合はエラーでOK。
die 'wrapped has no method';
}
}
use overload nomethod => sub {
my $self = shift;
my $op = pop;
my $method = overload::Method($self->{wrapped}, $op);
if($method) {
unshift @_, $self->{wrapped};
goto $method;
}
else {
# errorを発生せずに
# オーバーロードされていなかったことにして、
# デフォルトの挙動に戻したい。
}
};
1;
__END__