有这个:
use utf8; package ÁngryBird; #note the Á in the package name
perl -c结果是语法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.
那么,代码中有什么问题?
解决方法
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";
但是你在命名空间Package :: Stash中使用may create your own package stash inplementation,并在加载Package :: Stash之前通过设置环境变量PACKAGE_STASH_IMPLEMENTATION或变量$Package :: Stash :: IMPLEMENTATION来使用它.例如,如果您的实现具有名称Package :: Stash :: My,则将变量设置为My.