Bienvenido a los foros de Perl en español, pedrete.
Sí que podría ser debido a la presencia de caracteres de escape ANSI.
Fíjate que en el código que has publicado, en la línea 10, estás indicando que estás esperando por un carácter de fin de línea. Si el menú se genera por medio de caracteres normales, más un posicionamiento mediante caracteres de control, entonces nunca recibirás el carácter de fin de línea.
Podrías cambiar el operador <$sock> por read($sock, ...), para leer cada pocos bytes. O quizás más sencillo:
Using perl Syntax Highlighting
local $/; # indefinimos el carácter separador de registros (líneas), por lo que nos hacemos con toda la entrada
print <$sock>; # vuelca a pantalla todo lo que nos devuelve, sea lo que sea
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Yo te recomiendo usar
Net::Telnet, o, si existe, algún módulo específico para ese enrutador.
Por ejemplo, para acceder a un enrutador Huawei ADSL, se puede usar esto:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Net::Telnet ();
#$|++; # Opcional: desactivamos el caché de salida
my $telnet = Net::Telnet->new(
Timeout => 10,
Host => '192.168.1.1',
Port => 23,
Binmode => 0, # 0 o 1, dependiendo de cómo sean los caracteres finales de línea
Prompt => '/ATP>/', # Prompt inicial
);
$telnet->open();
print "Abierto\n";
$telnet->login('admin', 'admin'); # esta línea equivale a las cuatro siguientes
#$telnet->waitfor('/login: $/i');
#$telnet->print('admin');
#$telnet->waitfor('/password: $/i');
#$telnet->print('admin');
print "Registrado\n";
#print $telnet->dump_log();
print "Enviando help\n";
print $telnet->cmd("help"); # ejemplo de ejecución de un comando
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4