4

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

此解决方案不起作用:

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

  # ENTER CODE HERE
}
# ENTER CODE HERE
4

1 回答 1

6

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()电话线)

于 2013-11-14T14:59:05.170 回答