foreach my $targetServer (@targets) { # Ping host to check its available my $p = Net::Ping->new(); if ($p->ping($targetServer)) { $logger->info("Target [$targetServer] is alive, starting deployment "); foreach my $deploySection (@deployments) { if ($flagDeploy) { $logger->info("Starting deployment for [$deploySection] on target [$targetServer] "); my $deploySource = "$config{$deploySection}{'Source'}" ; my $deployDest = "$config{$deploySection}{'Destination'}" ; if ($flagNoMove) { my $thread = threads->new(sub {deployRoutine($targetServer, $deploySource, $deployDest, "true")}); push (@Threads, $thread); } else { my $thread = threads->new(sub {deployRoutine($targetServer, $deploySource, $deployDest)}); push (@Threads, $thread); } } } } else { $logger->warn("Couldn't ping target [$targetServer] host will be ignored "); } $p->close(); }