3

背景:

我希望创建一个包含一些供个人使用的模块的发行版——它永远不会出现(又名。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问题。
4

1 回答 1

3

'word character' 的定义随着以下因素的变化而变化:a)您的 perl 版本。b) 如果有问题的脚本使用您的输入作为二进制字符串或字符串。查看最新版本的 perl 正则表达式引擎的/a&/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

\x{...}根据perlre使用转义强制 unicode )。

于 2013-02-01T17:19:16.990 回答