在你的源中使用 Unicode 的 utf8 編譯指示

所述 utf8 編譯指示原始碼將被解釋為 UTF-8。當然,這只有在文字編輯器也將源儲存為 UTF-8 編碼時才有效。

現在,字串文字可以包含任意 Unicode 字元; 識別符號也可以包含 Unicode 但只包含類似字元的字元( 有關更多資訊,請參閱 perldataperlrecharclass ):

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 終端則不起作用。只有當你使用 -COSTDOUT 切換到 UTF-8 時,輸出才會正確。

use utf8 不影響標準 I / O 編碼和檔案控制代碼!