[sisyphus] Re: Сортировка кириллицы вPerl

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вс Июн 15 23:06:40 MSD 2003


On Sun, Jun 15, 2003 at 05:25:46PM +0300, Michael Shigorin wrote:
> > 1. Сортировка:
> > #!/usr/bin/perl -w
> > 
> > use strict;
> > use POSIX;
> > use locale;
> > use encoding 'cp1251';
> > 
> > my @l1 = ("п", "р", "с", "т");
> > my @l2 = qw(п р с т);
> > print "$_(", ord, ") " foreach sort(@l1); print "\n";
> > print "$_(", ord, ") " foreach sort(@l2); print "\n";
> > 
> > Вывод:
> > п(1087) т(1090) с(1089) р(1088) //?!
> > п(1087) р(1088) с(1089) т(1090)

Два разных результата?  Этого просто не может быть.

> > Как всё это объясняется? В доках вроде ничего не нашел.

Дайте подумать. :)

Ну нужно сделать так: во-первых, use encoding 'utf-8'; encoding -- это
кодировка текста в скрипте.  Во-вторых, IMHO для юникодных символов
настройки локали типа collate просто не нужны.  Таблица символов utf-8
уже заранее отсортирована, а правила преобразования символов однозначны
и заранее известны.  В таком случае use locale может что-нибудь ломать.

Короче,

#se locale;
use encoding 'utf-8';

так вроде всё работает.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20030615/662067be/attachment-0010.bin>


Подробная информация о списке рассылки Sisyphus