如何在词汇上关闭Perl的AUTOLOAD子程序?

前端之家收集整理的这篇文章主要介绍了如何在词汇上关闭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()调用没有行)

猜你在找的Perl相关文章