在你的源中使用 Unicode 的 utf8 编译指示
所述 utf8
编译指示源代码将被解释为 UTF-8。当然,这只有在文本编辑器也将源保存为 UTF-8 编码时才有效。
现在,字符串文字可以包含任意 Unicode 字符; 标识符也可以包含 Unicode 但只包含类似字符的字符( 有关更多信息,请参阅 perldata 和 perlrecharclass ):
use utf8;
my $var1 = '§я§©😄'; # works fine
my $я = 4; # works since я is a word (matches \w) character
my $p§2 = 3; # does not work since § is not a word character.
say "ya" if $var1 =~ /я§/; # works fine (prints "ya")
注意 :将文本打印到终端时,请确保它支持 UTF-8。*
输出和源编码之间可能存在复杂且反直觉的关系。在 UTF-8 终端上运行,你可能会发现添加 utf8
pragma 似乎会破坏:
$ perl -e 'print "Møøse\n"'
Møøse
$ perl -Mutf8 -e 'print "Møøse\n"'
M��se
$ perl -Mutf8 -CO -e 'print "Møøse\n"'
Møøse
在第一种情况下,Perl 将字符串视为原始字节并将其打印出来。由于这些字节碰巧是有效的 UTF-8,它们看起来是正确的,即使 Perl 不知道它们是什么字符(例如 length("Møøse")
将返回 7,而不是 5)。添加 -Mutf8
后,Perl 会正确地将 UTF-8 源解码为字符,但默认情况下输出为 Latin-1 模式,而将 Latin-1 打印到 UTF-8 终端则不起作用。只有当你使用 -CO
将 STDOUT
切换到 UTF-8 时,输出才会正确。
use utf8
不影响标准 I / O 编码和文件句柄!