A few small things
It looks you are testing for comments twice.
for (my $nr = 0; $nr < $filearrnr; $nr++) {
splice (@filearr, $nr, 1) if ($filearr[$nr] =~ /^#/)
}
and
next if ($filearr[$nr] =~ /^#/);
You might consider the more perlish, more compact construction
foreach my $nrl (@hostarr){}
instead of:
for (my $nr1 = 0; $nr1 < $hostarrnr; $nr1++)
If you wanted to be moderately fancy you could
fork() each server's FTP session. That way your script wouldn't hang waiting for an unreachable host to time out
email: mandog