首页 > 解决方案 > Moose 变量名称可能不包含 :: at

问题描述

所以我遇到了这个奇怪的错误。

变量名不能包含 :: at .../perl5/lib/perl5/x86_64-cygwin-threads-multi/Class/MOP/Package.pm

触发它的代码是:

override 'emitEvent::ENOTE::Final' => sub {
my ($self, $e) = @_;
my ($rval);

$rval = super();


return($rval);
};

我发现了这个关于错误的链接: http: //codeverge.com/perl.perl5.porters/a-very-old-bug-in-safe.pm/2018166

这有关系吗?

如果我把 '::' 去掉,它就会消失,但真的会弄乱我命名事物的方式,所以如果有解决方法,我会很感激。

-E

标签: perlperl-modulemoose

解决方案


override的第一个参数必须是继承方法的(非限定)方法名称。

emitEvent::ENOTE::Final不是可接受的 Perl 方法名称,因为 Perl 会认为它是指Final在 package中命名的方法emitEvent::ENOTE。如果你在创建一个名为 that 的方法时欺骗了某些东西,你应该修复它。


推荐阅读