#!/usr/bin/perl -- use strict; use warnings; use threads; use threads::shared; use WWW::Mechanize 1.60; #~ Main(@ARGV); Main( qw' http://yahoo.com/ http://google.com/ http://cpan.org/ http://ERROR/ ' ); exit(0); sub DEBUG { #~ print STDERR join ' ', threads->tid, scalar gmtime, @_, "\n"; } sub Main { my @tit; for my $url (@_) { ##!IMPORTANT! sets THREAD CONTEXT ##!! if context is void, join returns undef my $thr = threads->create( \&GET, $url ); } while ( threads->list ) { for my $thr ( threads->list ) { my $joi = $thr->join; my $err = $thr->error; push @tit, $err || $joi; } DEBUG( "threads::running", 0 + threads::running ); DEBUG( "threads::joinable", 0 + threads::joinable ); sleep 1; } ## end while ( threads->list ) print join "\n", @tit, ( time - $^T ) . " seconds\n"; } ## end sub Main sub GET { my ($url) = shift; DEBUG($url); my $ua = WWW::Mechanize->new( autocheck => 1 ); $ua->get($url); DEBUG( $url, $ua->title ); return $ua->title; } ## end sub GET __END__