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

前端之家收集整理的这篇文章主要介绍了为什么不从其他包调用Perl属性处理程序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对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块中的处理程序.

猜你在找的Perl相关文章