在 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/