gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:54:17 25 4
gpt4 key购买 nike

我对 Attribute::Handlers 有一个奇怪的问题,看起来像是某种错误:

package MyPackage;

use Attribute::Handlers;

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

在 MyPackage 中使用时,或从使用 MyPackage 的脚本的主包中使用时,只要编译器遇到以下形式的函数,就会调用 foo 处理程序
sub bar:foo {
...
}

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

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

任何人都可以理解这一点吗?过去几天我一直在绞尽脑汁考虑如何解决这个问题。

最佳答案

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

如果“使用”包使用 eval "use packagename";那么只会执行 BEGIN 块。不会执行 CHECK 块,也不会调用属性处理程序。

尝试使用 ATTR(CODE,BEGIN)在 BEGIN 块中执行处理程序。

关于perl - 为什么不从其他包调用 Perl 属性处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com