Debes hacer que el programa funcione con el sistema de localización que tú vas a usar.
Por ejemplo. Supongamos que tenemos un fichero de datos así:
Using text Syntax Highlighting
El resultado de la analítica es: 15% glucosa, 25% agua, 2% hierro, 0,01% carbón
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Como yo estoy en un sistema operativo trabajando con codificación es_ES.UTF-8, y el fichero lo he creado con un editor de textos adecuado, también estará codificado de esa manera (los dos caracteres con tildes están codificados con dos bytes cada uno).
Ahora bien, si no decimos nada a Perl, seguirá pensando que estamos trabajando con codificación iso-8859-1 (la de por defecto de Perl). Hay que indicarle que los ficheros de entrada están en una determinada codificación.
Como mi localización regional (UTF-8) coincide con la del fichero a leer, entonces solo tengo que indicar que en las operaciones de ficheros use la localización del sistema:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use open ':locale';
open my $FILE, q[<], 'kk.txt';
while (<$FILE>) {
while (/(\w+)/g) {
print "[$1]\n";
}
}
close $FILE;
__END__
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
La magia está en el
use open ':locale';, que hará que Perl sepa que los ficheros que vamos a leer están en la misma codificación que la que indica el sistema. Y la salida (los print()), también.
Ya solo queda abrir el fichero, leerlo por líneas, y buscar las palabras:
Using text Syntax Highlighting
[El]
[resultado]
[de]
[la]
[analítica]
[es]
[15]
[glucosa]
[25]
[agua]
[2]
[hierro]
[0]
[01]
[carbón]
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Más información en
perldoc open