Jaki jest poprawny sposób pisania unlode-świadomych jednolinijkowych w Perlu? Oczywistym sposobem:pisanie Unicode-jednoelementy w Perlu
$ echo 'フーバー' | perl -lne 'print if /フ/'
フーバー
... trochę wydaje się działać na pierwszy rzut oka, ale to tylko wypadek: Unicode jest interpretowany jako bajty jako kolejny przykład:
$ echo 'フーバー != フウバー' | perl -mString::Diff=diff -lne 'print join(" ", diff($1, $2)) if /(.*)!=(.*)/' => 29
フ?[??]バー[ ] { }フ?{??}バー
Wystarczy za pomocą Flaga -C
ustawić STDIN
/STDOUT
itp na UTF-8 nie jest wystarczająca sama:
$ echo 'フーバー' | perl -C -lne 'print if /フ/'
[no output]
... ponieważ teraz tekst w -e
nie jest interpretowany jako Unicode.
więc jest to do zrobienia (zakładając sane miejscowego - to jest on w postaci "*.UTF‑8"
) tak:
$ perl -C -Mutf8 [...]
Co masz na myśli, że polecenie 'echo' nie jest zależne od lokalizacji? – tchrist
'$ LANG = ja_JP.sjis bash $ echo -n フ | uniquote -b ¥ x83t $ echo -n フ | hex0000 83 74' vs. '$ LANG = de_AT.UTF-8 bash $ echo -n フ | uniquote -b \ xE3 \ x83 \ x95 $ echo -n フ | hex0000 e3 83 95' – daxim