in reply to Perl fork and http::request

First of all, putting Perl code into <code> ... </code> tags helps immensely with the readability.

Second, the fork() support in ActiveState Perl and Win32 is marginal at best. It's there, and there are situations in which it works, but implementing fork() on a Win32 platform is mostly done by copying the whole process space, and some things are not copied. So you will have to find alternatives to using fork(), for example nonblocking sockets or in your case maybe LWP::Parallel.

Replies are listed 'Best First'.
Re: Re: Perl fork and http::request
by Anonymous Monk on Feb 02, 2001 at 04:05 UTC
    Thanks. Here is the code again. I looked into LWP::Parallel. It seems it's not supported in ActivePerl on windows platform. Is there another way I can accomplish the same thing?
    use HTTP::Request::Common; use HTML::Parser; use HTML::TreeBuilder; use LWP::UserAgent; use URI::URL; @longurl = ('http://1.htm', 'http://2.htm', 'http://3.htm'); @longfie = ('PostData1', 'PostData2', 'PostData3'); $sitetotal=2; my $pid = fork; for ($sitenum=0; $sitenum <= $sitetotal; $sitenum++) { if ($pid = fork) { next; } if (defined $pid) { $ua[$sitenum] = new LWP::UserAgent; $ua[$sitenum]->timeout(4); $res[$sitenum] = $ua[$sitenum]->request(POST $longurl[$sitenum], C +ontent => [ DataField => "$longfie[$sitenum]" ] ); if ($res[$sitenum]->is_success) { $p[$sitenum]->parse($res[$sitenum]->content); } $base = $res[$sitenum]->base; $siten = $longsite[$sitenum]; $p[$sitenum]->traverse(\&extract_alinks, 1); exit; } else { die "Fork failed at number $sitenum: $!\n"; } } $returnstring; sub extract_alinks1 { #extract links and add to $returnstring }