$ time perl threads_yours.pl real 7m13.312s user 2m1.484s sys 10m8.982s $ time perl threads_mine.pl real 0m2.209s user 0m6.028s sys 0m0.604s #### $ uniq -c outfile | head 2275 Thread 1 1 ThreaThread 2 454 Thread 2 1 TThread 3 909 Thread 3 1 ThThread 5 454 Thread 5 1 Td 1 1364 Thread 1 1 Thread 1hread 2 #### #!/usr/bin/perl use strict; use POE qw(Component::Client::HTTP); use HTTP::Request; my @names = qw/ zezima fred bill john jack /; open my $fh, '>', 'outfile' or die $!; sub start_req { my $name = shift @names or return; POE::Kernel->post(weeble => request => response => HTTP::Request->new( GET => "http://rscript.org/lookup.php?type=track&time=62899200&user=$name&skill=all" ), $name ); } POE::Session->create( inline_states => { _start => sub { POE::Component::Client::HTTP->spawn; start_req for(1 .. 5); }, response => sub { my $name = $_[ARG0]->[1]; my $result = $_[ARG1]->[0]{_content}; if($result =~ m/gain:Overall:\d+:(\d+)/isg) { print { $fh } "$name $1\n"; } elsif($result =~ m/(ERROR)/isg) { print { $fh } "$name doesn't exist \n" } else { print { $fh } "$name 0\n"; } start_req; }, }, ); POE::Kernel->run; close $fh;