この classiclog は独自開発したフレームワーク Noon をベースにした CMS アプリケーション News で動いています。 mod_perl 100% です。 記事のなかで Noon の Gadget クラスをインクルードしてメソッドを起動できます。 ガジェットさえ書けば記事のなかで何でもできますが、 新しいガジェットを作って所定のディレクトリに置いただけではインクルードできません。 apache の起動時に「Noon の Gadget::Include」がアグリゲートした「Noon の Gadget クラス」しかインクルードできません。 新しいガジェットを Gadget::Include へ登録する必要があります。 登録できたら apache を再起動する必要があります。 これが News の欠点です。 つまり新しいガジェットを使うには Gadget::Include を書き換える必要があります。 ガジェットの装塡がプラグインな感じではないのです。 セキュリティ的には安全ですが面倒です。 アドオンという感じではまったくありません。 私しか使わないアプリケーションなのでプラグイン機構が未実装なんです。 mod_perl の速度追求のため、apache の起動時に モジュールをすべてアグリゲートさせます。

Gadget::Foo の run メソッド呼び出しの例:
記事に foo.run('there!') と書けば以下のように表示されます。

[% foo.run('there!') %]

Gadget::Foo のコードは

package Gadget::Foo;

our $NAME = __PACKAGE__;

use Gadget; push @ISA, qw(Gadget);
use Carp;
use strict;

sub run {
    my $self = shift;
    return $self->hallo(@_);
}

sub hallo {
    my $self = shift;
    return qq`[$NAME] hallo with "@_"`;
}

1;

たったこれだけです。

topic: perl
first posted: 2011-04-11 00:04:14
last modified: 2011-04-11 19:50:46