Entonces está claro... las líneas del fichero Equipos.txt tienen un carácter de retorno de carro, que es lo que hace el efecto de colocar el cursor al principio de la línea.
Si en el código hay un chomp(), entonces resulta que está eliminando un final de línea que no corresponde con el mismo final de línea del fichero.
Si, por ejemplo, edito el fichero Equipos.txt y le pongo finales de línea al estilo MSDOS:
Using text Syntax Highlighting
explorer@joaquin:~/Documents/Desarrollo> hexdump -C kk.txt
00000000 53 61 6c 69 72 09 30 0d 0a 45 71 75 69 70 6f 31 |Salir.0..Equipo1|
00000010 09 31 37 32 2e 31 36 2e 31 2e 31 0d 0a 45 71 75 |.172.16.1.1..Equ|
00000020 69 70 6f 32 09 31 37 32 2e 31 36 2e 31 2e 32 0d |ipo2.172.16.1.2.|
00000030 0a 45 71 75 69 70 6f 33 09 31 37 32 2e 31 36 2e |.Equipo3.172.16.|
00000040 31 2e 33 0d 0a 45 71 75 69 70 6f 34 09 31 37 32 |1.3..Equipo4.172|
00000050 2e 31 36 2e 31 2e 34 0d 0a |.16.1.4..|
00000059
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
ves que los finales de línea son del tipo 0x0D, 0x0A (retorno de carro, avanza de línea).
Si este fichero se lo paso al programa, me sale la misma salida que a ti:
Using text Syntax Highlighting
Digite su elección y presione enter: 1
] Antes era: [172.16.1.11
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
debido a que el chomp() ha eliminado solo los caracteres de avance de línea, ya que yo estoy ejecutando el programa en un ordenador con sistema operativo Linux, donde por defecto, los finales de línea se definen solo con el carácter avance de línea. Los caracteres de retorno de carro siguen estando ahí.
Lo que tenemos que hacer es quitar ese carácter de retorno de carro.
Hay varias soluciones...
1.- Podemos modificar la apertura del fichero para indicar cómo es ese fichero:
Using perl Syntax Highlighting
open my $ARCHIVO, q[<:crlf], "kk.txt";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Ahora Perl sabe que se trata de un fichero con líneas terminadas en
crlf. El problema ahora es... ¿estamos seguros de que el fichero Equipos.txt SIEMPRE va a tener esos finales de línea?
2.- Modificamos el indicador de cómo son los finales de línea:
Using perl Syntax Highlighting
{ local $/="\r\n";
# sigue lo mismo que antes: open(), while(), close()...
} # línea 21
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Aquí es necesario que modifiquemos el valor de $/ de forma local. Por eso hay que meter toda la operación entre llaves, para que no afecte luego a la operación de lectura del menú. Lo malo de esta operación es que tiene el mismo problema que el anterior.
3.- Quitar explícitamente el carácter que sobra:
Using perl Syntax Highlighting
chop;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
También tenemos el mismo problema de antes.
4.- Quitar los caracteres finales mediante una expresión regular. Cambiamos la línea 15 por
Using perl Syntax Highlighting
s/[\r\n]//g;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Así, no nos importará cuáles sean los caracteres de final de línea que traigan las líneas de Equipos.txt, pues serán eliminados.