有这个:
use utf8;
package ÁngryBird; #note the Á in the package name
perl -c
结果为 syntax OK
。
use utf8;
package ÁngryMoose;
use Moose;
perl -c
说,
ÁngryMoose is not a module name at
/opt/local/lib/perl5/site_perl/5.12.4/darwin-multi-2level/Class/MOP/Package.pm
line 209.
那么,代码中有什么问题?
答案 0 :(得分:8)
Moose
使用Package::Stash::PP
中的this regexp来检查包名称:
elsif ($package !~ /\A[0-9A-Z_a-z]+(?:::[0-9A-Z_a-z]+)*\z/) {
confess "$package is not a module name";
}
来自Package::Stash::XS
的
const char *vmre = "\\A[0-9A-Z_a-z]+(?:::[0-9A-Z_a-z]+)*\\z";
但您may create your own package stash inplementation位于命名空间Package::Stash
中,并在加载PACKAGE_STASH_IMPLEMENTATION
之前通过设置环境变量$Package::Stash::IMPLEMENTATION
或变量Package::Stash
来使用它。例如,如果您的实现名称为Package::Stash::My
,则将变量设置为My
。
答案 1 :(得分:1)
听起来这可能是Class::MOP
错误。您是否尝试过询问或报告错误?