|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Paul Kulchenko 2:5020/400 15 Jun 2000 19:30:34 To : All Subject : Re: cmp -------------------------------------------------------------------------------- Hi, Igor! Igor Tseglevsky wrote in message <8i8es4$ons$1@sensi.pu.ru>... >Кто может обьяснить, почему cmp не хочет сравнивать результаты работы >функции? > >% loc.pl >а б a в г д е я x ю к м л >a x а б в г д е к л м ю я >д г в a б а е л м к ю x я >a x а б в г д е к л м ю я > >% cat loc.pl >#!/usr/bin/perl -w > >use locale; >use POSIX 'locale_h'; >setlocale(LC_ALL, 'ru_RU.KOI8-R'); > >@bred = ('а', 'б', 'a', 'в', 'г', 'д', 'е', 'я', 'x', 'ю', 'к', 'м', 'л'); > >print join (" ", @bred), "\n"; > >print join (" ", sort { $a cmp $b } @bred), "\n"; >print join (" ", sort { lc($a) cmp lc($b) } @bred), "\n"; >print join (" ", sort { my $c = lc($a); my $d = lc($b); $c cmp $d } @bred), >"\n"; >% Честно говоря сначала не поверил, пока сам не убедился. Hеправильно работает даже с английскими буквами, если указываешь use locale. Причем по отдельности lc, uc и пр. и cmp работают правильно. Вместе -- нет. Почему -- не знаю. Попробую спросить в comp.*. В твоем случае сделай Transform, еще и быстрее будет, если список большой: print join (" ", map {$_->[0]} sort {$a->[1] cmp $b->[1]} map {[$_, lc($_)]} @bred ), "\n"; Так работает. Best wishes, Paul. --- ifmail v.2.15dev5 * Origin: Rostelecom/Internet Centre (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6552faecd124.html, оценка из 5, голосов 10
|