PerlModuleプラグイン

Movable Typeで、テンプレート内でちょっとしたプログラムを実行したい場合は、結構あります。
Brad Choate氏が開発したPerlScriptプラグインを使えば、テンプレート内にPerlのプログラムを書くことができます。

ただ、他の人に配布するテンプレートの場合、テンプレート内にプログラムを直接に書いてあると、そのプログラムを書き換えられて、予想外のことが起きてしまう可能性があります。
そこで、プログラムをファイル(Perlのモジュール)から読み込んで実行するプラグインを作りました。
「テンプレート内でちょっとしたプログラムを使いたいが、プラグイン化するほどでもない」といった時や、「プラグインにする前のプロトタイプを作りたい」といった時に便利だと思います。

1.インストール

プラグインは以下からダウンロードすることができます。

PerlModule_1_00.zip

ダウンロードしたZipファイルを解凍すると、「PerlModule」というフォルダができます。
このフォルダを、Movable Typeの「plugins」フォルダにアップロードします。

2.MTPerlModuleタグ

このプラグインをインストールすると、「MTPerlModule」というファンクションタグが追加されます。
以下のように、実行するPerlのモジュール名と、その中のサブルーチン名を指定すると、そのサブルーチンが実行されます。
そして、サブルーチンの戻り値がテンプレートに出力されます。

<$mt:PerlModule module="モジュール名" sub="サブルーチン名"$>

呼び出すサブルーチンには、パラメータとして「$ctx」と「$args」が渡されます。
$ctxはMTのコンテキストで、$argsはMTPerlModuleタグのモディファイアを指すハッシュリファレンスです。
$ctxと$argsの詳細については、CHEEBOWさんの「Movable Typeプラグイン開発入門」や、拙著の「Movable Type Developer's Guide Volume 1」を参照してください。

なお、このプラグインは、内部的には以下のような処理を行うだけです。

reqiure モジュール名;
モジュール名::サブルーチン名($ctx, $args);

また、モジュールのファイルは、上の処理で読み込めるディレクトリに入れておきます。
mt-check.cgiを実行すると、Movable Typeの実行時にライブラリをインクルードするパスを調べることができます。

3.サンプル

モジュールのサンプルとして、「lib」→「PerlModule」ディレクトリに「Sample.pm」というファイルを入れてあります。
具体的なモジュールの書き方は、Sample.pmを参照してください。

以下の3つのサブルーチンを入れてあります。

3-1.hello

「Hello, World」と出力するだけです。
テンプレートに以下のように書くと、このサブルーチンを実行することができます。

<MTPerlModule module="PerlModule::Sample" sub="hello">

3-2.random

乱数を出力します。
テンプレートに以下のように書くと、このサブルーチンを実行することができます。

<MTPerlModule module="PerlModule::Sample" sub="random">

デフォルトでは、0以上100未満の乱数(小数点以下を含む)を出力します。
「min="○○"」と「max="●●"」のモディファイアを指定すると、○○以上●●未満の乱数を出力することができます。
また、「int="1"」のモディファイアを指定すると、乱数の小数点以下を切り捨てます。

例えば、以下のようにすると、1以上10未満の整数の乱数を出力することができます。

<MTPerlModule module="PerlModule::Sample" sub="random" min="1" max="10" int="1">

3-3.entry_length

ブログ記事の長さ(バイト数)を求めます。
MTEntry系のタグを使える場所で、以下のように書きます。

<MTPerlModule module="PerlModule::Sample" sub="entry_length">