[sisyphus] Re: Сортировка кириллицы в Perl
Michael Shigorin
=?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Вс Июн 15 18:25:46 MSD 2003
On Sun, Jun 15, 2003 at 04:12:44PM +0400, Dmitriy Ryzhov wrote:
> Просветите плз, что за глюки такие? Перл глючит с юникодом или я?
> ALT Linux Sisyphus (20030605). perl-5.8.0-alt1. Локаль - CP1251.
С этим лучше в Sisyphus.
> 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 'cp1251'" - всё ок (строки уже в
> utf-8 не хранятся):
> п(239) р(240) с(241) т(242)
> п(239) р(240) с(241) т(242)
>
> Проверил под Windows XP (Perl 5.8.0 от ActiveState) - без "use encoding"
> вроде глючит, с ней:
> п(1087) т(1090) с(1089) р(1088)
> п(1087) т(1090) с(1089) р(1088)
>
> 2. Регулярные выражения без учета регистра:
> print("аБвгд" =~ m/б/i? "1": "0", "\n");
> print("абвгд" =~ m/б/i? "1": "0", "\n");
> print(lc("аБвгд") =~ m/б/? "1":"0", "\n");
>
> Вывод:
> 0
> 0
> 1
>
> Без "use encoding 'cp1251'" - опять всё ок: 1 1 1
> Под Windows всё точно также.
>
> Как всё это объясняется? В доках вроде ничего не нашел.
--
---- WBR, Michael Shigorin <mike на altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
Подробная информация о списке рассылки Sisyphus