Perl и преобразование регистра
2009-08-04T05:34:00+07:00
Недавно хорошо промучился с преобразованием регистра в Perl. Дело в том,что Perl и Юникод не на короткой ноге, поэтому простым путём lc() ничего сразу не получится. Вот как следует преобразовывать в нижний регистр строку с Юникод-терминала:
#!/usr/bin/perl -w
use strict;
use Encode;
chomp(my $input = <STDIN>);
my $string = decode(“UTF-8”,$input);
$string = lc($string);
print encode(“UTF-8”,$string);
Я был удивлён,что совершенно не требуется прагма use locale. Наоборот, при её использовании всё только ухудшается.Также существуют функции decodeutf8 и encodeutf8, которые принимают только один параметр; работают аналогично.Юникод - двухбайтовая кодировка, и требует подобного обращения при любом использовании. В конце хочу добавить,что замечание интерпретатора “Wide character in print at …” сигнализирует о том,что вы забыли закодировать строку обратно в UTF-8, и выводите её на экран во внутренней кодировке (попробуйте заменить последнюю строку на обычный print $string).