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

为什么不从其他包调用Perl属性处理程序?

发布时间:2020-12-15 23:34:29 所属栏目:大数据 来源:网络整理
导读:我对Attribute :: Handlers有一个奇怪的问题,看起来像某种bug: package MyPackage;use Attribute::Handlers;sub UNIVERSAL::foo :ATTR(CODE) { ...} 当在MyPackage中使用时,或者从使用MyPackage的脚本的主包中使用时,只要编译器遇到表单的函数,就会调用foo
我对Attribute :: Handlers有一个奇怪的问题,看起来像某种bug:

package MyPackage;

use Attribute::Handlers;

sub UNIVERSAL::foo :ATTR(CODE) {
  ...
}

当在MyPackage中使用时,或者从使用MyPackage的脚本的主包中使用时,只要编译器遇到表单的函数,就会调用foo处理程序

sub bar:foo {
 ...
}

但是,我在另一个使用MyPackage的.pm文件中有另一个包.编译器接受“:foo”属性,但不调用处理程序.

我尝试在MyPackage中编写一个导入函数,将foo处理程序导出到调用者的命名空间,但这似乎没有帮助.

任何人都可以理解这个吗?在过去的几天里,我一直在努力解决这个问题.

解决方法

默认情况下,在编译阶段后,在CHECK块中调用属性处理程序.

如果“using”包使用eval“use packagename”;然后只执行BEGIN块.不会执行CHECK块,也不会调用属性处理程序.

尝试使用ATTR(CODE,BEGIN)来执行BEGIN块中的处理程序.

(编辑:李大同)

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

    推荐文章
      热点阅读