Sharky, там в самом начале было что-то про оптимизацию, так вот у меня вопрос в связи с этим: "А какая именно часть работает долго? Та что вычисляет ip адреса или что осуществляет подключение?"
Соответственно предложение следующее: если долго вычисляются ip-шники, то надо менять код их вычисления! На мой взгляд можно было все это сделать намного проще и передавать в функцию пинг готовый ip.
Если вычисляется сравнительно быстро (по сравнению с пингом), то выносить каждый пинг в отдельный поток. Правда, насколько я знаю, потоки действенны, когда их кол-во до 16 штук.
А по поводу оптимизации кода:
for (my $i=$fip; $i<=$tip; $i++) заменить на for ($fip .. $tip)
$ip="$d1.$d2.$d3.$d4"; заменить на $ip=join ".", ($d1,$d2,$d3,$d4);
print "$_[0] is Good\n"; заменить на print $_[0]." is Good\n";
После этого производительность должна увеличится на доли миллисекунд. :-) Но это факт!
И вообще вычисление ip-шников вынести в отдельную функцию.
И тогда программа должна работать по следующему алгоритму:
1)Получаем начальный и конечный ip;
2)Вычисляем все ip, которые будем пинговать, и переписываем их в общий массив;
3)Для каждого ip из общего массива создаем отдельный поток, который будет вызывать функцию sock();