HTTP::Requestにデータを追加する
HTTP::Asyncを使うとき、HTTP::Requestにデータを追加できれば便利な気がする。
例えば「あるURLに定期的にアクセスするプログラムで、2回 404 が続いたら別の処理をしたい」場合、前回のステータスをHTTP::Requestに保存できると、GETの結果を処理するときに参照しやすい。
で、HTTP::Requestのサブクラスを作ってみることにしたのだが……。
#!/usr/pkg/bin/perl use strict; use warnings; use HTTP::Async::Polite; use HTTP::Request; package My::Request; use base qw(HTTP::Request); sub new { my $class = shift; my $self = $class->SUPER::new(@_); return $self; } sub prev_status { my ($self, $value) = @_; if ($value) { $self->{_prev_status} = $value; } else { return $self->{_prev_status}; } } 1; package main; my $http_async = HTTP::Async->new; my $req = My::Request->new(GET => 'http://www.google.co.jp'); $req->prev_status(200); $http_async->add($req); while ( my $res = $http_async->wait_for_next_response ) { my $req = $res->request; print $req->prev_status, "\n"; }
もっと簡単な方法があるような気がする。