LINUX.ORG.RU

perl unicode и length


0

0

Локаль utf-8, perl 5.8.8, etch. Есть в файле список слов на русском (тоже в utf-8). Хочу однострочником на perl вывести только те слова, в котороых больше 6 букв. Не могу заставить length считать длину строки не побайтно :( ПОдскажите, плииз, какой-нибудь негромоздкий и "правильный" способ решить поставленную задачу?

anonymous

perl -ne 'use Encode; $_ = decode_utf8 ($_); print encode_utf8($_) if length >7 '

В этом случае $_ будет интерпретироваться как юникодная строка.

Или, как вариант, BEGIN{ binmode STDIN, ":utf8"; binmode STDOUT ":utf8"}

(Второе преобразование можно и не делать в обоих случаях, однако это приведет к варнингу: Wide character in print at -e line 1, <> line 2.)

lodin ★★★★
()

use Encode;

$a = <>;

Encode::_utf8_on ($a);

print length($a);

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.