在Perl中编写支持Unicode的单行程序

前端之家收集整理的这篇文章主要介绍了在Perl中编写支持Unicode的单行程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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相关文章