I ran your code from the command line and it did not throw any error, and it even correctly reported all three hosts as up. But then I got the idea that maybe there is a file ship.cfg in your current directory (which you did not mention but which I should have caught sooner). Taint mode regards input from local files as tainted (see perldoc perlsec or the perldoc online page). So you will need to untaint that data manually. I chose the sledgehammer approach to untainting:
if ( -e "ship.cfg" ) {
open (CFGFILE, "<", "ship.cfg") || die;
@hosts=<CFGFILE>;
close (CFGFILE);
# untaint all data from ship.cfg
@hosts = map { /^(.*)$/ and $1 } @hosts;
} else {
# Enter your hosts here...
@hosts = qw/host1 host2 host3 aliens/;
}
But I would recommend hardcoding all hosts in the script instead, as that will be much more secure than reading in a file and pinging every host named in that file. |