にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

Plaggerのためのオブジェクト指向Perlお勉強

Ruby触ったりPHP触ったり節操のない私ですがPlaggerも触りたいので今度はPerlのお勉強です。といってもまともな参考書など持っていないのでネットを徘徊して参考サイトを読むのがメイン。
Plaggerはモジュールを使ってはいるけれど、いつかはモジュールを作る側に回ってみたいのです。ですが、色々Plagger関係の記事でモジュールのソースコードを見てもちんぷんかんぷんなわけです。
で、どのモジュールにも書いてある、

use base qw( Plagger::Plugin );

の類の意味からして分からなかったので、ぐぐって出てきたこのサイトを参考にちょっくらチェック。ここほど厳密に見る気はしませんが。(どこまで細かく見てるのかもよくわからないし(まだ読んでないし))
とりあえず一通り読んでみた結果、

  • Package hoge;がどうやらクラス名に当たる
  • use base qw(hoge);で継承
  • newでblessしてオブジェクトを関連付け
  • Perlの関数(?:subのこと)の引数は配列で受けてshiftなんだね(!!?)

ということがなんとなくわかりました。
ここで無謀にもlib/Plagger/Plugin.pmを見てみることにします。
Packageやらuse base qw(...やらは見たらあるのはわかるとして、newの部分。

sub new {
    my($class, $opt) = @_;
    my $self = bless {
        conf => $opt->{config} || {},
        rule => $opt->{rule},
        rule_op => $opt->{rule_op} || 'AND',
        rule_hook => '',
        meta => {},
    }, $class;
    $self->init();
    $self;
}

おお、これは先のチュートリアルサイトで見たnewと同じパターンですな。それでいてなおかつ、YAMLでハッシュで記述するconfigとruleをなんやかんやしてうまいことここでnewする引数$optに突っ込んでいるのですね。なるほどなるほど(分かったフリ)
そういえば、プラグインでよくみるregisterがないや、と思って見てみると、下の方のドキュメント部で、

(前略)
=head1 DESCRIPTION

This is the base class for plagger plugins.  Pretty much everything is done
by plugins in Plagger.
(中略)
Then register some hooks:

  # register hooks
  sub register {
    my ($self, $context) = @_;
    $context->register_hook( $self,
       'thingy.wosit'  => $self->can('doodad'),
    )
  }


This means that the "doodad" method will be called at the
"thingy.wosit" stage.
(後略)

とか書いてある。これがPerldocとかいうやつでしょうか。試しに、

$ perldoc Plagger/Plugin.pm

とかしてみるとキレイに整形されて出てきました。素晴らしい。
話が反れました。
それによると、registerで各モジュールに定義された動作をするためのフックを割り当ててるようですね。これだけでなんかプラグインが作れてしまいそうな気がします。Plagger恐るべし。
なんかちょっと満足したので今日はここまで。