Каков правильный способ записи 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 [...]