El siguiente código¿Por qué agregar un sufijo común revierte el orden de clasificación en la configuración regional en_US?
#!/usr/bin/perl
use strict;
use warnings;
my $s1 = '[email protected]';
my $s2 = '[email protected]';
my $s3 = 'aaa2000';
my $s4 = 'aaa_2000';
no locale;
print "\nNO Locale:\n\n";
if ($s1 gt $s2) {print "$s1 is > $s2\n";}
if ($s1 lt $s2) {print "$s1 is < $s2\n";}
if ($s1 eq $s2) {print "$s1 is = $s2\n";}
if ($s3 gt $s4) {print "$s3 is > $s4\n";}
if ($s3 lt $s4) {print "$s3 is < $s4\n";}
if ($s3 eq $s4) {print "$s3 is = $s4\n";}
use locale;
print "\nWith 'use locale;':\n\n";
if ($s1 gt $s2) {print "$s1 is > $s2\n";}
if ($s1 lt $s2) {print "$s1 is < $s2\n";}
if ($s1 eq $s2) {print "$s1 is = $s2\n";}
if ($s3 gt $s4) {print "$s3 is > $s4\n";}
if ($s3 lt $s4) {print "$s3 is < $s4\n";}
if ($s3 eq $s4) {print "$s3 is = $s4\n";}
imprime
NO Locale:
[email protected] is < [email protected]
aaa2000 is < aaa_2000
With 'use locale;':
[email protected] is > [email protected]
aaa2000 is < aaa_2000
la que no puedo seguir: en el mismo tiempo, en condiciones de uso local, hay una < b Y un @ yahoo. com> [email protected]? !!
¿Me falta algo más o menos obvio, o es esto un error? ¿Pueden otros confirmar que ven el mismo comportamiento?
Locale is $ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Gracias de antemano.
Acaba de describir el Algoritmo de intercalación Unicode. No es realmente una cosa local. Pero confiaría en la UCA con o sin modificaciones locales un millón de veces más de lo que nunca confiaría en las configuraciones regionales de los proveedores. Esos siempre me fallan. Considero/opino que las configuraciones regionales son cintas vencidas obsoletas para propósitos de ctype/cotejo ahora que tenemos Unicode. – tchrist
No, estoy describiendo la realidad de su sistema tal como se aplica a su problema. Sospecho que la mayoría de los proveedores hoy en día implementan sus configuraciones regionales basadas en el UCA; después de todo, el UCA no se inventó de la nada. Pero no entiendo por qué los entornos locales fallan o deben considerarse heredados. Ciertamente, necesita reglas de clasificación específicas del idioma siempre que haya idiomas que se desvíen de los pedidos "predeterminados". Pero eso es realmente además del objetivo de esta pregunta. –