関数をラップする

ウェブサービス等のAPI とやり取りするモジュールを使って開発している際、デバッグのためAPI からのレスポンスをのぞき見たいときがあると思います(自分はさっきありました)。

そんなとき、関数をラップすると便利です。

型グロブ

my $orig_request = LWP::UserAgent->can('request');
*LWP::UserAgent::request = sub {
    use Data::Dumper;
    my $response = $orig_request->(@_);
    print Dumper($response);
    return $response;
};

Hook::LexWrap

use Hook::LexWrap;
wrap 'LWP::UserAgent::request',
    post => sub {
        use Data::Dumper;
        my $response = $_[-1];
        print Dumper($response);
};

各ラッパー関数にはラップ元の関数と同じ引数リストが渡されます。加えて$_[-1]に関数の戻り値が設定されます。

$_[-1]を変更することで関数の最終的な戻り値を変更できます。

つぎはkoyachiさんお願いします。

Back