sub __PACKAGE__::NewWay::new { my $class= shift; API->use_the_new_way; return bless [], $class; } sub __PACKAGE__::NewWay::DESTROY { API->use_the_old_way; } sub AUTOLOAD { ... my $newway= __PACKAGE__::NewWay->new(); goto \&$func; # or, if you want to keep AUTOLOAD in the stack trace: # return &$func( @_ ); }