在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 [...]