perl - 在 perl 中,$self->subname 与 $self->MYPACKAGE::subname 相同吗?

标签 perl

在 perl 中,$self->subname$self->MYPACKAGE::subname 相同吗?我是 Pythonizer 的作者还有一段神秘的 Perl 代码,这个代码又来自 CGI.pm。这里的代码使用$self,它是CGI包的一个实例变量,然后调用其中定义的hidden函数,但是代码不仅仅使用$self->hidden(...),它使用$self->CGI::hidden(...)。当我将其转换为 Python 时 self.CGI.hidden(...) 时,我收到一条错误消息,指出 CGI 类没有 CGI 属性。我想知道在这种情况下是否应该创建一个仅指向类实例的 CGI 属性(或者应该指向该类)?无论如何,这到底意味着什么?

package CGI;
...
sub hidden { ... }
...
$self->CGI::hidden(...);

最佳答案

In perl, is $self->subname the same as $self->MYPACKAGE::subname

没有。

$self->subname 将在与对象 $self 关联的符号表中查找 subname,该符号表来自包被 $self 祝福进入。

$self->MYPACKAGE::subname 大部分(但不完全是 - 请参阅下面来自 tobyink 的评论)就像调用 MYPACKAGE::subname($self),即,它不会在与 $self 关联的符号表中查找方法,而是在 MYPACKAGE (及其父包)的符号表中查找。 $self 甚至可能没有方法subname

关于perl - 在 perl 中,$self->subname 与 $self->MYPACKAGE::subname 相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74739190/

相关文章:

perl - 为什么我的 Perl 脚本在通过 SSH 执行时挂起?

perl - 如何在 64 位 CentOS 系统上为 32 位自定义 Perl 构建 32 位 XS 模块?

perl - 如何使我的 Perl 模块的 README 文件与 Github 的 Markdown 显示兼容?

perl - 如何在perl AGI脚本中调用 Asterisk 函数?

perl - 如何使用 Perl 或 shell 以非递归方式迁移目录?

perl - Perl 中的 Java File.pathSeparator

perl - 使用 Dist::Zilla 从 Perl 模块版本中排除目录

forms - 如何访问在 multipart/form-data POST 中上传的内容数据?

regex - Perl 就地编辑 : Find and replace in X12850 formatted file

perl - 如何在 perl mason CGIHandler 中获取 QUERY_STRING?