El tema de la codificación distinta de la de latin1 es compleja... deriva de cuando a alguien se le ocurrió crear una
torre tan alta como para desafiar a Dios... y claro... cuando le haces enfadar, pasa lo que pasa...
Lo que debes hacer es indicar a Perl que tu programa está escrito en
utf8:
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use strict
;
use warnings
;
use diagnostics
;
use utf8
;
use locale
;
use open OUT
=> ':locale';
my @x = split q{|}, "áéíóúüñçÁÉÍÓÚÜÑÇ";
print join q{}, @x;
print join q{}, sort @x;Coloreado en 0.005 segundos, usando
GeSHi 1.0.8.4
La salida es:
- Código: Seleccionar todo
áéíóúüñçÁÉÍÓÚÜÑÇ
ÁÇÉÍÑÓÚÜáçéíñóúü
Y como ves, la 'ñ' se ha colocado correctamente entre la 'í' y la 'ó'. Y las mayúsculas antes que las minúsculas.
Para ser más estrictos, deberías poner siempre '
use locale' para indicar a Perl que debe usar la codificación de la terminal en la que se está ejecutando. Esto se refiere a la ordenación de las letras, para los operadores lógicos de comparación y otras (sort(), lc(), uc(), ...).
Otro ejemplo, con palabras:
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use utf8
;
use locale
;
use open OUT
=> ':locale';
@x = qw( coñe cuña cono cana coño cano cone coña caña cena cona cuna caño
);
print join q{ }, @x;
print join q{ }, sort @x;Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Sale:
- Código: Seleccionar todo
coñe cuña cono cana coño cano cone coña caña cena cona cuna caño
cana cano caña caño cena cona cone cono coña coñe coño cuna cuña