カラクリスタ

ただの「人」の個人ブログ。人です

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

概要: 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::XPathcanが使われていて、それを継承している Subscription::XOXO は問題なさそう。 (実際には動かしてない。多分問題ないはず。)

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

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

FIXME