gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:12:33 25 4
gpt4 key购买 nike

背景:

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

最佳答案

“单词字符”的定义因以下因素而改变: 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

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

关于perl - 在 Module::Starter 中使用 unicode 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com