Plaggerで他のプラグインを継承するときの注意というかメモ

読了まで:約1分


概要: Plagger で他のプラグインを継承する場合の注意。


  • [[Plagger 使って LastFM の最近聴いた音楽を Twitter に投稿する /post/50888698188]] に対して送られたトラックバック、
  • エロチック街道@はてな - Publish::Twitter で日本語を投稿する で突っ込まれたことなんだけど、既存の Plagger のプラグインを書き換える場合、対象となるプラグインを継承してから、 目的の部分を書き換える、というほうがいいみたい。で、それはいいんだけど、 実際にその方法でやったらちょっとはまったので、それをメモ。

既存の Plagger プラグインを継承する場合、registerメソッドの書き方によっては、 registerメソッドを書き直さないと動かない。

例を挙げると、継承元のregisterメソッドで、

sub register {
my ( $self, $context ) = @_;
$context->register_hook(
$self,
'subscription.load' => \&load,
)
}

のようにメソッドのリファレンスが直接指定されている場合、どうも継承元が呼び出されるっぽい。 たぶんこのあたりの挙動については、Plagger がどうのこうのというより、 Perl の継承とかリファレンスがどうとかそのあたりだと思う。

で、逆に、

sub register {
my ( $self, $context ) = @_;
$context->register_hook(
$self,
'subscription.load' => $self->can('load'),
)
}

のように can メソッド使ってる場合、問題ないみたい。 実際に Subscription::XPath はcanが使われていて、それを継承している Subscription::XOXO は問題なさそう。 (実際には動かしてない。多分問題ないはず。)

で、思ったんだけど、実際に Plagger のプラグイン書くときは継承されることも考えて、 フックに登録するときはcanメソッド使ったほうがいいかも。 すくなくともregisterメソッド書き直すことにはならない。と思う。

とりあえずメモ終わり。何かマズってたら教えてください。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。