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
chomp
$ _, pero no lo uses después.Respuestas:
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?fuente
print "a\x0db"
, Perl imprimiráa
, vuelve a la izquierda y sobrescribe laa
conb
.