The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
$| = 1;
use strict;
use warnings;

use EV;
use Net::Curl::Multi;
use Net::Curl::Easy qw(/^CURLOPT_/);
use Net::Curl::Multi::EV;

print "VERSION=$Net::Curl::Multi::EV::VERSION\n";

my $multi = Net::Curl::Multi->new();
my $curl_ev = Net::Curl::Multi::EV::curl_ev($multi);

my @urls = (
	"http://www.bing.com/",
	"http://www.bing.com/search?q=curl",
	"http://www.bing.com/search?q=perl+curl",
);


my $n = @urls;
sub add_request {
	my $url = shift @urls or return;
	print "starting to fetch $url\n";

	my $easy = Net::Curl::Easy->new();

	$easy->setopt(CURLOPT_URL, $url);
	$easy->setopt(CURLOPT_FOLLOWLOCATION, 1);
	$easy->setopt(CURLOPT_WRITEHEADER, \ my $headers);
	$easy->setopt(CURLOPT_FILE,        \ my $body);


	my $finish = sub {
		my ($easy, $result) = @_;
		$n--;

		if ($headers) {
			my @headers = split /\r?\n\r?\n/, $headers;
			my $last_headers = $headers[-1];
			my @last_headers = split /\r?\n/, $last_headers;;

			my $first_line = shift @last_headers;
			my ($code, $message) = $first_line =~ m/HTTP\/\d\.\d\s+(\d+)\s+(.+)/;
			my $body_length = length $body;

			print "$code ($message)\t$url\t$body_length\n";
		} else {
			print "result: $result (", 0 + $result ,") for $url\n";
		}

		if (@urls) {
			add_request();
		} else {
			EV::break() unless $n;
		}
	};

	$curl_ev->($easy, $finish, 4 * 60);

	return 1;
}


foreach (1 .. 10) {
	add_request() or last;
}


EV::run();