Si el csv está generado en MacOS, es posible que tenga los finales de línea a CR (al estilo de Mac).
Y si el programa Perl lo estás ejecutando en Windows, los finales de línea son otros (LN+CR) o si lo haces en Linux o UNIX, otro distinto (LN).
Perl, en Windows, intentará pasar los finales de línea en LN del antiguo DOS al nuevo CRLF, pero si le estás pasando otro formato distinto, pues se hará un lío.
Entonces, debes mirar cuál son los finales de línea que Excel te ha dejado, porque así deberás ayudar en la lectura de las líneas (<>) y el chomp().
Esto lo resuelves ajustando la variable especial $/.
Más información en
perlport, sección Newlines.
Mira a ver si puedes ver el contenido del fichero, byte a byte, con un editor hexadecimal, por ejemplo, y así sabrás si lo escribe bien o no.
En Linux, yo uso hexdump:
Using text Syntax Highlighting
explorer@joaquin:~/Documents/Desarrollo> hexdump -C Libro1.csv
00000000 31 3b 32 3b 33 3b 34 0a 31 3b 32 3b 33 3b 34 0a |1;2;3;4.1;2;3;4.|
00000010 35 3b 36 3b 37 3b 38 0a 39 3b 31 30 3b 31 31 3b |5;6;7;8.9;10;11;|
00000020 31 32 0a |12.|
00000023
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
O también desde el propio Perl:
Using bash Syntax Highlighting
~
> perl -le 'my $f = join "", <>; print join " ", map { unpack "H*", $_ } split //, $f' Libro1.csv
31 3b
32 3b
33 3b
34 0a
31 3b
32 3b
33 3b
34 0a
35 3b
36 3b
37 3b
38 0a
39 3b
31 30 3b
31 31 3b
31 32 0a
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Se ve claramente que los finales de línea yo los tengo en formato UNIX (0x0a es el avance de línea).