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化のみにしました。