Esto es muy raro. Se me ocurren diversas opciones.
* se ha creado un filtro de salida para el STDOUT que impide sacar el valor de un "\n" (algo muy raro y diabólico)
* se ha cambiado la definición de lo que el sistema operativo entiende como "final de línea" (esto no es solo diabólico, sino criminal
)
* se ha abierto STDOUT con una capa tipo ':raw' o ':bytes' o algo así (muy raro, pero posible)
* se ha modificado el valor de $\ (que no debería influir en el resultado, de todas maneras)
* se está ejecutando el programa en un ordenador Mac (los finales de línea "\n" solo emiten un carácter 0x0a. Muy raro, también, ya que no influye)
* la terminal de salida no es capaz de interpretar lo que le enviamos (frecuente en sesiones XTerm después de haber emitido basura, y alguna vez en sesiones DOS que cargan el controlador ANSI.SYS)
Es necesario ajustar más para saber lo que pasa.
¿En qué sistema operativo estás?
¿Qué versión de Perl estás usando?
¿Qué terminal estás usando?
Si ejecutas el programa en una terminal nueva, ¿sigue fallando?
¿Puedes reducir el código al menor número de líneas que sean capaces de reproducir el error, y mostrar ese código?
Algunas veces, para saber qué está saliendo por la consola, redirijo la salida hacia un codificador hexadecimal:
Using text Syntax Highlighting
> perl -E 'print "Hola\n"' | hexdump -C
00000000 48 6f 6c 61 0a |Hola.|
00000005
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Y así sé exactamente los bytes que se generan.