我陷入了使用 PerlAUTOLOAD
子例程的遗留代码中。每个未映射/未定义的子程序将由AUTOLOAD
. AUTOLOAD
是否可以在词法环境中禁用处理?
此解决方案不起作用:
# ENTER CODE HERE
{
# Turn off AUTOLOAD for this block.
local *AUTOLOAD;
undef *AUTOLOAD;
# ENTER CODE HERE
}
# ENTER CODE HERE
我陷入了使用 PerlAUTOLOAD
子例程的遗留代码中。每个未映射/未定义的子程序将由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()
电话线)