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";
}

もっと簡単な方法があるような気がする。