Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Igor Nikolaev                        2:5030/266     29 Jun 2000  05:34:47
 To : Igor Tseglevsky
 Subject : Re: cmp
 -------------------------------------------------------------------------------- 
 
 Igor Tseglevsky <tsypa@hq.pu.ru> wrote:
 
 > Я как бы верю, что это локализация, но уж очень странно
 > она не работает -- в зависимости от того, как функции параметры
 > подсунуть.
 
 Это типичный Шрёдинбуг, как только ты
 (гад! на линуксовку не пришёл...) о нём
 сказал, так он сразу начал где ни попадя
 попадаться, вот я его до абсурда довёл:
 
 % cat l.pl
 #!/usr/bin/perl -w
 use locale;
 @X = split //, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 $\ = "\n"; # $, =' ';
 print @X;
 print sort { lc $a cmp lc $b } @X;
 % LANG=ru_RU.KOI8-R
 % ./l.pl 
 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
 lkjihgfedcbamyxwvutsrqponzLKJIHGFEDCBAMZYXWVUTSRQPON
 % LANG=C
 % ./l.pl 
 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
 aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
 %
 
 Без use locale всё хорошо ;-) А вот с LANG=en_US.ISO_8859-1
 такая же гадость. Задница оттого, что при включенной локали
 оператор cmp (не функция lc!!!) в этом контексте нифига не 
 работает:
 
 #!/usr/bin/perl -w
 use locale;
 sub c { my $a = $_[0] cmp $_[1]; print "'$_[0]'$a'$_[1]'\n"; return $a; }
 my @X = split //, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 my @Y = sort { &c ( lc $a, lc $b ) } @X;
 
 Печатает что-то типа:
 [skip]
 'b'-1'z'
 'a'-1'z'
 'z'-1'b'
 'z'-1'c'
 ...
 
 Честно говоря у меня такое впечатление, что кто-то
 кому-то на очень низком уровне то-ли указатели попортил,
 то ли в стек немного нагадил... Когда вместо специальным
 образом обрабатываемого @_ ставишь честные параметры
 (например $_[0].'' то всё устаканивается).
 
 А может это gcc постарался. Короче upgrade и забудь.
 
 -- 
 Игорь
 
 --- ifmail v.2.12.os.sensi
  * Origin: Как его тащит! Как колбасит! (2:5030/266@fidonet)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: cmp   Igor Nikolaev   29 Jun 2000 05:34:47 
Архивное /ru.perl/13416cf041f3a.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional