use warnings; use strict; use Parallel::ForkManager; use 5.010; my $pm=new Parallel::ForkManager(50); use Fcntl qw(:flock SEEK_END); $pm->run_on_finish(sub{ my (undef, undef, undef, undef, undef, $res_ref) = @_; my ($res, $line) = @$res_ref; if ($res == 1) { open my $outf, ">>", "outf"; flock($outf, LOCK_EX) or next; seek($outf, 0, SEEK_END); say $outf $line; say $line; flock($outf, LOCK_UN); } }); my $i = 1; while (1) { $i++; $pm->start and next; my $res; my $page=""; $page = `curl -s http://thepiratebay.se/torrent/$i -m 120` while ($page !~ /Not Found}) { $res = 0; } else { $res = 1; my ($title) = $page =~ /
\s*(.*?)\s*<\/div>/s; my ($size) = $page =~ /
Size:<\/dt>\s*
.*?\((\d*) Bytes\)<\/dd>/s; my ($seeders) = $page =~ /
Seeders:<\/dt>\s*
(\d*)<\/dd>/; my ($leechers) = $page =~ /
Leechers:<\/dt>\s*
(\d*)<\/dd>/; my ($magnet) = $page =~ /magnet:\?xt=urn:btih:(.*?)(&|")/; $line = $i."|".$title."|".$size."|".$seeders."|".$leechers."|".$magnet; } $pm->finish(0,[$res, $line]); }