# untested sub AUTOLOAD { if (my ($pkg, $name) = $AUTOLOAD =~ /^((?:.*::)?)(.*)$/) { $name =~ /^_default_(.*)/ and croak "method $1 not found"; my $sub = sub { my $method = $_[0]->{m}{$name}; goto &$method if defined $method; my $default = "_default_$name" shift->$default(@_); } no strict 'refs'; *$AUTOLOAD = $sub; goto &$sub; } croak "bad method name $AUTOLOAD"; }