在 Perl 中编写可识别 Unicode 的单行程序的正确方法是什么?显而易见的方法:
$ echo 'フーバー' | perl -lne 'print if /フ/'
フーバー
...乍一看似乎还可以,但这只是一个意外:Unicode 被解释为字节,如下例所示:
$ echo 'フーバー != フウバー' | perl -mString::Diff=diff -lne 'print join(" ", diff($1, $2)) if /(.*)!=(.*)/' => 29
フ?[??]バー[ ] { }フ?{??}バー
只需使用
-C
设置 STDIN
的标志/STDOUT
等到 UTF-8 本身是不够的:$ echo 'フーバー' | perl -C -lne 'print if /フ/'
[no output]
...因为现在
-e
中的文本不被解释为 Unicode。所以这是要走的路吗(假设一个正常的 LOCALE——也就是说,形式为
"*.UTF‑8"
)像这样:$ perl -C -Mutf8 [...]
最佳答案
是的,正在加载 utf8
pragma需要解释“フ
” 源代码中的 UTF-8 序列作为字符而不是单独的字节。
Perl -C
命令行开关和 utf8
pragma 与语言环境无关,但 shell 的 echo
命令不是。
关于perl - 用 Perl 编写支持 Unicode 的单行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497557/