穆斯&& utf8(包|方法)名称

时间:2012-06-26 13:25:31

标签: perl utf-8 moose

有这个:

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.

那么,代码中有什么问题?

2 个答案:

答案 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

this regexp

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错误。您是否尝试过询问或报告错误?