4

有这个:

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.

那么,代码有什么问题?

4

2 回答 2

8

Moose使用这个正则表达式Package::Stash::PP检查包名称:

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";

但是您可以在命名空间中创建自己的包存储实现,并在加载之前Package::Stash通过设置环境变量PACKAGE_STASH_IMPLEMENTATION或变量来使用它。例如,如果您的实现具有名称,则将变量设置为.$Package::Stash::IMPLEMENTATIONPackage::StashPackage::Stash::MyMy

于 2012-06-26T14:13:10.150 回答
1

听起来这可能是一个Class::MOP错误。您是否尝试过在那里询问或报告错误?

于 2012-06-26T14:13:21.447 回答