за написание однострочников с поддержкой Unicode на Perl

Как правильно писать однострочные символы Unicode в Perl? Очевидный способ:

$ 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 [...]
19
задан Johannes Pille 2 May 2012 в 13:01
поделиться