end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

perlでプラグインを書き、対象クラスのmethodを再定義

例えば、 Ima::DBI の _mk_db_closure() を再定義する場合、
次のように書いて、「use MyPlugin 」しましょう。

package MyPlugin;
use strict;
use warnings;
use Ima::DBI;

sub import {
    no strict 'refs';
    no warnings 'redefine';
    *{"Ima::DBI\::_mk_db_closure"} = \&_mk_db_closure;
}

sub _mk_db_closure {
    my ($class, $dsn, $user, $pass, $attr) = @_;
}

1;
__END__

「use 〜」は以下の処理と同等です

BEGIN {
    require MODULE;
    MODULE->import(LIST);
}