如何在名称和文件名中编写带有UTF-8的Perl模块?我当前的尝试产生“无法在@INC中找到Täst.pm”,但该文件确实存在。我在Windows上,还没有在Linux上试过这个。
test.pl
:
use strict;
use warnings;
use utf8;
use Täst;
Täst.pm
:
package Täst;
use utf8;
更新:我当前正在处理它use Tast
(ASCII)并将package Täst
(Unicode)放在Tast.pm
(ASCII)中。但这很令人困惑。
答案 0 :(得分:3)
不幸的是,Perl,Windows和Unicode文件名目前还没有合在一起。我的建议是为你的模块名称节省很多麻烦并坚持使用纯ASCII。这blog post提到了一些问题。
答案 1 :(得分:3)
use utf8
需要出现在package Täst
之前,以便可以正确解释后者。在我的Mac上:
test.pl:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Tëst;
# 'use utf8' only indicates the code's encoding, but we also want stdout to be utf8
use encoding "utf8";
Tëst::hëllö();
Tëst.pm:
use utf8;
package Tëst;
sub Tëst::hëllö() {
print "Hëllö, wörld!\n";
}
1;
输出:
Macintosh:Desktop sherm$ ./test.pl
Hëllö, wörld!
正如我所说 - 我在Mac上运行了这个。如上所述,您的里程可能因Windows而异。
答案 2 :(得分:2)
Unicode支持通常在边界处失败。包和子例程名称需要干净地映射到文件名,这在某些操作系统上是有问题的。操作系统不仅必须创建您期望的文件名,而且您还必须能够在以后找到相同的名称。
我们在Effective Perl Programming中讨论了文件名问题,但我在How do I create then use long Windows paths from Perl?中进行了更多总结。杰夫阿特伍德在他Filesystem Paths: How Long is Too Long?的帖子中提到了这一点。
答案 3 :(得分:1)
如果这是您计划发布的软件,我不推荐这种方法,说实话。即使你让它工作得很好,在UTF-8配置不正确的机器上也可能有点脆弱,和/或文件名可能不包含UTF-8字符等。