補足: 『&fml4;と &fmldevel; のコードの書き方はどのくらい違うか?』 コマンドの典型である『ファイルを送り返す』だけの help コマンドを例にと り、相違点を説明しましょう。 &fmldevel; では help ファイルを送り返すコードの実体は FML::Command::User::help にあり、 FML::Process::Command クラスから (FML::Command の AUTOLOAD を経由して)呼び出されます。 全てのコマンドは FML::Command::User::コマンドもしくは FML::Command::Admin::コマンドクラスとして実装されています。なお makefml や CGI は FML::Command::Admin::コマンド を使います。コマンドメー ルは User や Admin を権限に応じて適宜使い分けます。 help コマンドの実体は FML::Command::User::help の process() 関数です。 sub process { my ($self, $curproc, $optargs) = @_; my $config = $curproc->{ config }; my $charset = $config->{ reply_message_charset }; my $help_file = $config->{ help_file }; # template substitution: kanji code, $varname expansion et. al. my $params = { src => $help_file, charset_out => $charset, }; my $help_template = $curproc->prepare_file_to_return( $params ); if (-f $help_template) { $curproc->reply_message( { type => "text/plain; charset=$charset", path => $help_template, filename => "help", disposition => "help", }); } else { croak("no help file ($help_template)\n"); } } ここで $curproc はハッシュリファレンスで、&fml4; の %Envelope におおむ ね相当します。名前の通り、UNIX カーネルでおなじみの current process 構 造体へのポインタのようなもので、プロセスに関連するいろいろなデータ構造 やオブジェクトへのリファレンスを含んでいます。そして $config ハッシュ として蓄えられている設定変数空間は、&fml4; ではグローバル変数です。 prepare_file_to_return() はメッセージテンプレートの中にある変数の展開 や文字コード変換を適宜行ないます。 $curproc->reply_message() は引数によって振舞いがことなりますが、 いずれにせよ、メッセージをキューに入れるメソッドです。 キューに入れられたメッセージ群は、プロセスの終了直前に一通のメールとし て組み立てなおされ、Mail::Delivery クラス経由で送信されます。メッセー ジキューの種類がファイルとメッセージが混在していれば、適宜 MIME マルチ パートのメッセージが生成されます。 この仕組みは &fml4; の Notify() と同様ですが、あらゆるメッセージがキュー に入れられ、最後に一気に処理されるという点で大きく異なります。 なお get コマンドなども同じキューイングの仕組みを使っています。つまり &fml4; の Notify() 相当部分が(通常の記事配送以外の)あらゆる送信機能を 担当するということです。この点において、送信のキューイングのメカニズム は &fml4; と大きく異なっています。