加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:23:23 所属栏目:大数据 来源:网络整理
导读:我被遗留在使用Perl的AUTOLOAD子程序的遗留代码中.每个未映射/未定义的子例程都将由AUTOLOAD处理.是否可以在词法环境中禁用AUTOLOAD处理? 此解决方案不起作用: # ENTER CODE HERE{ # Turn off AUTOLOAD for this block. local *AUTOLOAD; undef *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()调用没有行)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读