El problema está en el modo de leer el fichero.
En el bucle while tienes puesto
@linea = <DATOS> que quiere decir que del fichero
DATOS se lean TODAS las líneas y se almacenen en el array
@linea. Como es de suponer que el fichero no está vacío, esa operación, además, devuelve un valor de verdedaro al while, pero sólo una vez, ya que el fichero ha sido leído en su totalidad y no hay más qué leer.
Al llegar a la línea del ssh, pones
ssh("$user\@linea", "$cmd"); que quiere decir que se abra una conexión SSH a
situ@linea, y claro, en ese momento salta el error porque ssh no sabe quien es el host 'linea'.
Prueba con esto:
Using perl Syntax Highlighting
#!/bin/perl
use Net
::SSH qw(ssh
);
my $user = 'situ';
my $cmd = "ls";
open(DATOS
,"ips.lst");
while($linea = <DATOS>) {
chomp($linea);
ssh
("$user\@$linea", $cmd);
}
close DATOS
;Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Los cambios son:
* hemos pasado de usar una variable array
@linea a una variable escalar
$linea, por lo que DATOS guardará allí una línea cada vez, hasta que llegue el final de fichero y le devuelva un falso al
while* con chomp() quitamos el carácter fin de línea a $linea (no nos hace falta para el comando ssh, incluso puede molestarnos)
* en la función ssh, usamos la variable $linea para indicar el host. Además, quitamos las comillas a $cmd porque no son necesarias (sólo está esa variable dentro de ellas).