Всем приветик.
Умные дяденьки, помогите мне пожалуйста разобраться в этом лесу.
Ну никак что-то я не пойму, что там к чему.
Купила умную книжку, там расписано как использовать модуль Thread и всё бы хорошо, но он даже не установлен у меня такой на хостере к тому же хотелось бы научиться делать ЭТО сначала на fork.
Вот написано мол так и так, обязательно дескать используйте:
#!/usr/bin/perl -Tw
use strict;
[b]use sigtrap;[/b]
use Socket;
А мне и не жалко. Написано, значит так надо. Написала, делов-то. Только не совсем понятно - зачем? Куда его потом пихать этот $SIG{PIPE} = \'IGNORE\';?
Или я вообще что-то напутала?
Вот у меня есть, например, такая задача: нужно скажем с десяти разных адресов забрать модулем LWP по два-три документа (адреса и имена документов известны). В самом обычном текстовом файле лежат данные по строчкам: адрес, имя документа. Код не нужен - просто сама идея.
читаю я файл в массив(он небольшой - 10 строчек всего), а вот теперь самое для меня трудное, - как мне сделать несколько процессов. Т.е. по одному документику в цикле я получаю их все, но это очень уж долго.
Просто делаю for для массива, split\'ом достаю адрес, имя документа. Получила, следующий... Примитивно до обидного.
Ой. Забыла. Сначала я пингую каждый адрес Net::Ping. Если есть пинг - забираю документ, пинга нет - next;
В общем идея такая:
foreach (@massiv) {
my ($server,$port,$doca) = split... достаем данные
if ($pid = fork) {
$p=ping->$server
if ($p) { #пинг получен - сервер жив
#запрашиваем $server:80/$doca при помощи LWP, делаем с ним чего-то;
} #EO if($p)
else {print $server,\'не отвечает\';}
waitpid($pid,0);
} else {
die "cannot fork: $!" unless defined $pid;
exit;
} #EO if ($pid = fork)
} #EO foreach (@massiv)ужас, да?
Подскажите пожалуйста, как правильно а?
Целое письмо написала.