Perl模块名称中的UTF-8

时间:2011-04-19 14:09:29

标签: perl utf-8 perl-module

如何在名称和文件名中编写带有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)中。但这很令人困惑。

4 个答案:

答案 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字符等。