pablgonz escribiste:es decir, reviso si la clave existe, y si es así, añado el valor capturado al array si éste ya está definido en el script o creo un nuevo con los valores en caso de que no exista, ¿es la manera correcta?
No, el valor de $resultado{extraer} es una referencia a un
array, no un
hash.
Using perl Syntax Highlighting
if (exists $resultado{extraer} ) {
push @extraer_tmp, @{ $resultado{extraer} };
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero no sé por qué mantener dos
arrays separados (no sé para qué les vas a necesitar por separado). Si el problema general de 'extraer' es el de tratar un único
array, se podría hacer el push() directamente a $resultado{extraer} (no probado):
Using perl Syntax Highlighting
push @{ $resultado{extraer} }, (qw(postscript tikzpicture pgfpicture))
if exists $resultado{extraer};
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
pablgonz escribiste:Una consulta (para variar), añadiste use utf8 y use open qw(:std :utf8), ¿quiere decir que el archivo de entrada debe estar codificado en utf8 por obligación? ¿podré leer archivos en codificaciones distintas, latin1 por ejemplo? Lo más probable es que mis archivos de entrada estén en utf8, pero, no siempre es así (sobre todo con los archivo más antiguos).
Los puse porque en el código había un carácter '§', y como a) iba a sacarlo en pantalla, y b) mi programa lo estaba editando con codificación utf-8, le tenía que indicar a Perl que "eso de ahí" no eran un par de bytes cualesquiera, sino un carácter bien definido.
Si no decimos nada, Perl sacará lo que nosotros le hayamos puesto, sin preguntar. Si la ristra de bytes tiene significado para la terminal o el archivo donde estemos escribiendo, Perl no lo sabe -ni tiene por qué saberlo-.
Ahora bien... si estamos leyendo información en una codificación y queremos guardarla en otra, sí que tenemos que tener cuidado de decirle a Perl qué es lo que está gestionando.
En tu caso, si no dices nada (no pones use utf8 ni el open), Perl tratará todo lo que llegue como ristra de octetos codificados en latin1 (bytes, a efectos prácticos), así que eso es justo lo que mandará fuera. Por eso te ha funcionado bien, porque Perl trata la E/S como bytes de la misma codificación.