HOOK
hook における諸問題
hook は微妙な、もしくは複雑なカスタマイズのために是非必要です。
ですが、実装においてはいくつかの問題があります。
まず、第一に hook の名前に一定の基準が必要です。
$START_HOOK のような曖昧なものではなく。
また、HOOK の書き方がしょうしょう良くなくても動くのがよいでしょう。
通常
use strict;
になっていますが、
HOOK を評価する lexical scope では無視するようにするべきでしょう。
hook の命名規則
hook 名前の標準的な形式については
プログラム名_メソッド名_start_hook
プログラム名_メソッド名_end_hook
のようにすることにします。
例えば、fmlconf のメインの部分 run() の HOOK の名前は
fmlconf_run_start_hook
fmlconf_run_end_hook
となり、run() の中での hook 呼び出しは次のようなコードになります。
sub run
{
my ($curproc, $args) = @_;
my $config = $curproc->{ config };
my $eval = $config->get_hook( 'fmlconf_run_start_hook' );
if ($eval) {
eval qq{ $eval; };
print STDERR $@ if $@;
}
$curproc->_fmlconf($args);
$eval = $config->get_hook( 'fmlconf_run_end_hook' );
if ($eval) {
eval qq{ $eval; };
print STDERR $@ if $@;
}
}
現実にはもっといろいろな場所に HOOK がないと不便でしょうが、
その名前は上述の HOOK 以外に設定します。
単純に hook2 でいいのかもしれないし、
可能であればもう少し理解しやすい名前にするべきでしょう。