微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么不从其他包中调用Perl属性处理程序?

| 我在Attribute :: Handlers中遇到了一个奇怪的问题,看起来像是某种错误
package MyPackage;

use Attribute::Handlers;

sub UNIVERSAL::foo :ATTR(CODE) {
  ...
}
在MyPackage中或从使用MyPackage的脚本的主包中使用时,只要编译器遇到以下形式的函数,就会调用foo处理程序:
sub bar:foo {
 ...
}
但是,我在另一个.pm文件中有另一个使用MyPackage的程序包。编译器接受\“:foo \”属性,但不调用处理程序。 我尝试在MyPackage中编写一个导入函数,该函数将foo处理程序导出到调用者的名称空间,但这似乎无济于事。 有人能理解吗?在过去的几天里,我一直在思考如何解决此问题。     

解决方法

        默认情况下,在编译阶段之后,将在CHECK块中调用属性处理程序。 如果\“ using \”包使用
eval \"use packagename\";
,则仅执行BEGIN块。不会执行CHECK块,也不会调用属性处理程序。 尝试使用
ATTR(CODE,BEGIN)
在BEGIN块中执行处理程序。     ,        昨天,我以某种方式完全错过了您的帖子中的Attribute :: Handlers -正如我在对此答案的较旧版本的评论中提到的那样,也许将ѭ4包裹在
BEGIN
块中会导致问题得到正确解决。 我不确定为什么您选择将
foo()
属性处理程序放在ѭ7中-这是朝着使其正常工作迈出的一步吗?     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。