[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