在Module :: Starter中使用unicode文件名

时间:2013-02-01 16:44:48

标签: perl unicode perl-module

背景

我想创建一个包含一些供个人使用的模块的发行版 - 它永远不会看到光明的一天(又名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
$ 

我尚未尝试过的事情:

  • 花一天时间编译perl 5.16以获得更多的unicode善良。
  • 攻击源,并启用远程连接到unicode的任何内容。
  • 检查这不只是对分发名称的限制(我不担心,因为CPAN永远不会看到这一点)。
  • 检查这是否是Getopt::Long问题。

1 个答案:

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