Perl lee el archivo devolviendo solo líneas parciales

0

Estoy intentando escribir una secuencia de comandos para cambiar el nombre de los archivos según una lista determinada. Para probar y asegurarse de que la lista se lea correctamente, tengo:

print("start\n");
open(READFILE, "<prune.txt") || die "Couldn't open file";
print("file open\n");
while ($curline = <READFILE>){

print "$curline\n";
}
close (READFILE);

si mi archivo de lista es

P_4
IMG_0531
PICT0009
IMG_0416
RAY HASSMAN GROUP 015
P_5

entonces mi salida es

P_5 HASSMAN GROUP 015

¿Por qué estoy recibiendo este extraño lío?

Como se solicita aquí es el volcado hexadecimal de mi archivo de entrada

0000: 50 5F 34 0D 49 4D 47 5F   P_4¬IMG_
0008: 30 35 33 31 0D 50 49 43   0531¬PIC
0010: 54 30 30 30 39 0D 49 4D   T0009¬IM
0018: 47 5F 30 34 31 36 0D 52   G_0416¬R
0020: 41 59 20 48 41 53 53 4D   AY HASSM
0028: 41 4E 20 47 52 4F 55 50   AN GROUP
0030: 20 30 31 35 0D 50 5F 35    015¬P_5

Estoy usando Mac 10.9.2 build 13c39

traisjames
fuente
¿Hay algún carácter de pestaña en el archivo? También tú chomp $ _, pero no lo uses después.
choroba
Whoops utilizando una versión antigua del código. Acabo de actualizarlo. Aún obtienes P_5 HASSMAN GROUP 015
traisjames

Respuestas:

0

En lugar de caracteres de final de línea, su script produce "\r" Los caracteres que mueven el cursor a la posición más a la izquierda, pero no avanzan una línea. Por lo tanto, toda la información se sobrescribe una y otra vez. No puedo imaginar cómo puede suceder esto con literal "\n" en el código, ¿está seguro de que el código que publicó produce el resultado? ¿En qué sistema operativo estás? ¿Puedes publicar un hexdump del archivo de entrada?

choroba
fuente
Ok agregué el volcado a mi OP
traisjames
Sí, es como lo he adivinado. Si tu print "a\x0db", Perl imprimirá a, vuelve a la izquierda y sobrescribe la a con b.
choroba
ok, así que debería entrar en el archivo de lista utilizando un programa de expresiones regulares (text wrangler) y hacer un s # \ r # \ n # g
traisjames
@traisjames: Inténtalo. Puedes usar Perl para cambiar el archivo, por cierto.
choroba