pablgonz escribiste:1- El script que genera los archivos en los directorios images/ corre en Windows y en Linux. ¿Creará distintos finales de línea dependiendo del sistema en el que se corra? ¿O depende del fichero de entrada?
Por defecto, y si no decimos nada, Perl convertirá cada final de línea, del archivo que estemos leyendo, desde su codificación especial (uno, dos, o más caracteres), a "\n". Y para la salida, hará el proceso contrario: convertirá cada "\n" que pongamos en los print() y en los say(), por la codificación adecuada para los finales de línea, según el sistema operativo en donde estemos.
Así que sí: Perl, en Windows, escribirá todos los "\n" como "\r\n". Y el
mismo programa escribirá distintos finales de línea cuando esté en Linux, MacOs, etc.
En la mayor parte de las ocasiones, eso no será un problema, porque es justo lo que queremos.
El problema viene cuando queremos procesar archivos que vienen de otros sistemas operativos. O cuando generamos archivos que serán llevados a otros sistemas operativos (que serán luego procesados por otros programas, así que éstos estarán esperando que sus finales de línea estén bien).
Resumen: ¡coherencia! O... un plan.
Perl puede hacer, por ejemplo, desde Linux, leer y escribir archivos MSDOS, en lugar de archivos con finales de línea Unix.
Basta con poner en la parte de arriba del programa:
Using perl Syntax Highlighting
use open IO
=> ':crlf';Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
y con eso indicamos que, por defecto, toda la salida y la entrada debe pasar por la capa de de Entrada/Salida ':crlf'.
Más información en
perldoc -f open,
perldoc perlopentut y
perldoc open.
pablgonz escribiste:2- Noté que utilizas palabras con tilde. En Linux se muestran sin problema, pero en Windows no. ¿Por qué?
Si no decimos nada, Perl saca los textos sin ningún tipo de traducción, tal como estén escritos en el programa.
Si salen mal en Windows es porque, quizás, has escrito el programa en un editor, con codificación ANSI o cp1252, y a la hora de ejecutarlo, en la ventana de línea de comandos del MSDOS, esa ventana está en codificación cp850 o cp852.
En ese caso, pones al principio del programa:
Using perl Syntax Highlighting
use open OUT
=> ":encoding(cp850)"; # toda salida, por defecto, será en CP850
use open ':std'; # incluido STDOUTColoreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Ejemplo