| Summary: | bug in sort | ||
|---|---|---|---|
| Product: | Base System | Reporter: | Nikita Shamgunov <nsh> |
| Component: | bin | Assignee: | Mark Murray <markm> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | ||
| Priority: | Normal | ||
| Version: | 3.3-STABLE | ||
| Hardware: | Any | ||
| OS: | Any | ||
On Thu, Dec 09, 1999 at 02:50:52PM +0500, Nikita Shamgunov wrote: > # > # îÅ×ÅÒÎÏ ÓÏÒÔÉÒÕÅÔ > my @array1 = sort {lc($a) cmp lc($b)} @array; It looks like some problem with lc+cmp combination. It works when result of lc assigned to variable first, i.e. sub comp { $aa = lc($a); $bb = lc($b); return $aa cmp $bb; } -- Andrey A. Chernov http://nagual.pp.ru/~ache/ MTH/SH/HE S-- W-- N+ PEC>+ D A a++ C G>+ QH+(++) 666+>++ Y On Thu, Dec 09, 1999 at 02:50:52PM +0500, Nikita Shamgunov wrote: > my @array1 = sort {lc($a) cmp lc($b)} @array; This patch should fix the problem: --- pp.c.old Wed May 26 06:04:22 1999 +++ pp.c Fri Dec 10 19:52:31 1999 @@ -2178,7 +2178,8 @@ else *s = toUPPER(*s); } - + if (SvSMAGICAL(sv)) + mg_set(sv); RETURN; } @@ -2207,6 +2208,8 @@ } SETs(sv); + if (SvSMAGICAL(sv)) + mg_set(sv); RETURN; } @@ -2239,6 +2242,8 @@ *s = toUPPER(*s); } } + if (SvSMAGICAL(sv)) + mg_set(sv); RETURN; } @@ -2271,6 +2276,8 @@ *s = toLOWER(*s); } } + if (SvSMAGICAL(sv)) + mg_set(sv); RETURN; } @@ -2298,6 +2305,8 @@ else sv_setpvn(TARG, s, len); SETs(TARG); + if (SvSMAGICAL(TARG)) + mg_set(TARG); RETURN; } -- Andrey A. Chernov http://nagual.pp.ru/~ache/ MTH/SH/HE S-- W-- N+ PEC>+ D A a++ C G>+ QH+(++) 666+>++ Y Responsible Changed From-To: freebsd-bugs->markm Mark will be interested in the patch. State Changed From-To: open->closed |
ðÒÏÂÌÅÍÙ Ó ÓÏÒÔÉÒÏ×ËÏÊ ÍÁÓÓÉ×Ï× ÒÕÓÓËÉÈ ÓÌÏ× ÂÅÚ ÒÁÚÌÉÞÅÎÉÊ ÒÅÇÉÓÔÒÁ. How-To-Repeat: #!/usr/bin/perl use strict; use locale; use POSIX qw( locale_h ); setlocale( LC_ALL, 'KOI8-R' ); my @array; while( <DATA> ) { next if( /^#/ ); s/\s*(\S+)\s*/$1/; push( @array, $_ ); } # # åÓÌÉ ÐÏÓÔÁ×ÉÔØ ÜÔÕ ÓÔÒÏËÕ ÔÏ ÓÏÒÔÉÒÕÅÔ ×ÅÒÎÏ lc - × ÎÉÖÎÉÊ ÒÅÇÉÓÔÒ # my @array1 = sort {lc1($a) cmp lc1($b)} @array; # # # îÅ×ÅÒÎÏ ÓÏÒÔÉÒÕÅÔ my @array1 = sort {lc($a) cmp lc($b)} @array; # ÷Ù×ÏÄÉÍ ÒÅÚÕÌØÔÁÔ print join( "\n", @array1 ); sub lc1 { my $str = shift; $str =~ tr/áâ÷çäåöúéëìíîïðòóôõæèãþûýÿùøüàñ/ÁÂ×ÇÄÅÖÚÉËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝßÙØÜÀÑ/; return $str; } __DATA__ ääô äÉÓÔÅÍÐÅÒ äÅÌØÆÉÎ