如何以词法方式关闭Perl的AUTOLOAD子例程?



我被困在使用Perl的AUTOLOAD子例程的遗留代码中。每个未映射/未定义的子例程将由AUTOLOAD处理。是否可以在词法环境中禁用AUTOLOAD处理?

此解决方案不起作用:

# ENTER CODE HERE
{
  # Turn off AUTOLOAD for this block.
  local *AUTOLOAD;
  undef *AUTOLOAD;
  # ENTER CODE HERE
}
# ENTER CODE HERE

AUTOLOAD 特定于所讨论的包。所以重新定义包方法:

#!/usr/bin/perl
#
{
    package autoloading;
    sub AUTOLOAD {
        print "YEAH ${AUTOLOAD}!n";
    }
    sub new {
        return bless {}, $_[0];
    }
}
$obj = new autoloading();
$obj->foo();
*{autoloading::AUTOLOAD} = sub {};
$obj->bar();

产生输出:

YEAH autoloading::foo!

$obj->bar()呼叫没有线路)

最新更新