如果不告诉Perl脚本的源代码是utf8格式,Perl会假定为ASCII格式。这意味着默认情况下,Perl解释器将视为4个单独字符。如果您将单行命令更改为
perl -Mutf8 -lwe 'print length("")'
,则可以看到length函数提供所期望的输出。
utf8编译指示告诉Perl源文件以utf8而不是ASCII格式进行编码。有关更多信息,请参见perldoc utf8
。
F0.9F.90.AA
,Perl创建了一个等同于"\xF0\x9F\x90\xAA"
创建的字符串。使用use utf8;
(这是-Mutf8
添加的内容),Perl代码使用utf8
对源代码进行编码,因此Perl创建了一个等同于"\x{1F42A}"
创建的字符串。 - ikegamiperl -MEncode -e'print encode("UTF-8", "sub f\xC9 { }")' | perl -Mutf8
可以运行,但是 perl -MEncode -e'print encode("latin1", "sub f\xC9 { }")' | perl
无法运行。 - ikegami