Released FurlX::Coro!

Coroを使うと簡単にFurlで並列HTTP通信が出来ます。

#!perl
# usage: http-ping.pl [urls...]
use strict;
use warnings;
use Coro;
use Coro::Select; # Furlよりも先にロードすること!
use Furl;

my @coros;
foreach my $url(@ARGV) {
    push @coros, async {
        print "fetching $url\n";
        my $ua   = Furl->new();
        my $res  = $ua->head($url);
        print "$url: ", $res->status_line, "\n";
    };
}

$_->join for @coros;
__END__

わざわざモジュール化する必要はあまりないのですが、上記スクリプトが時々参照されることがあるのでモジュールとして独立させました。FurlX::Coroと上記スクリプトとの違いは、select()のオーバーライドが局所化されている点だけです。

使い方も同じです。モジュールをロードする順番を気にしなくてよくなった点、気をつけなければならない事が少なくなりました。

#!perl
# usage: http-ping.pl [urls...]
use strict;
use warnings;
use Coro;
use FurlX::Coro;

my @coros;
foreach my $url(@ARGV) {
    push @coros, async {
        print "fetching $url\n";
        my $ua  = FurlX::Coro->new();
        my $res = $ua->head($url);
        print "$url: ", $res->status_line, "\n";
    }
}

$_->join for @coros;
__END__

実際には、この程度のことにCoroを使うのは少し大げさです。つまり、Coroは黒魔術モジュールなので大きなアプリケーションでの使用はためらいがあります。できればAnyEvent化したほうがいいでしょうが、いかんせん私がAnyEventに慣れていないので難しく、一旦諦めてCoro化のみにしました。