我想创建一个包含一些供个人使用的模块的发行版 - 它永远不会看到光明的一天(又名CPAN)。我想使用Module::Starter
启动这些模块,以利用简单的测试和版本管理。
(Ubuntu GNU / Linux上的perl 5.12.4)
如何在Module :: Starter中使用Unicode文件名,例如Local::Λ
←(Lambda)?
这不起作用:
$ module-starter --module Local::Λ
Invalid module name: Local::Λ at /usr/local/share/perl/5.12.4/Module/Starter/App.pm line 132.
实际失败的行是
croak "Invalid module name: $_" unless /\A[a-z_]\w*(?:::[\w]+)*\Z/i;
Module::Starter::Simple
中的(第95行)。
Lambda显然是一个“字”字符。
顺便说一句,这是有效的:
$ cat > xΛ.pm
use utf8;
package xΛ;
sub foo { print "42\n" }
1;
^D
$ perl -Mutf8 -MxΛ -e 'xΛ::foo()'
42
$
Getopt::Long
问题。答案 0 :(得分:3)
“单词字符”的定义更改为:a)您的perl版本。 b)如果有问题的脚本使用您的输入作为二进制字符串或字符串。查看/a
&最近版本的perl正则表达式引擎的/u
标志。
仅供参考:由于Perl人员努力实现跨平台兼容性,并且各种文件系统对Unicode的支持范围很广,因此他们决定此时不支持Unicode模块名称。
Amon评论的决议: 这就是诀窍:
perl -Mutf8 -M5.012 -MModule::Starter::App -E'$ARGV[1]="Local::\x{039B}";Module::Starter::App->run' -- --module Local::Λ --license gpl3 --ignore git
(根据perlre,使用\x{...}
转义强制unicode。