#!/usr/local/bin/perl
use strict;
use warnings;
use HTML::Template;
use POSIX qw/ strftime /;
MAIN:{
my $tmpl = HTML::Template->new(
filehandle => *DATA,
filter => \&tmpl_filter_now,
);
print $tmpl->output;
}
sub tmpl_filter_now {
my $text_ref = shift;
my @localtime = localtime;
print $$text_ref;
$$text_ref =~ s{
<(?:!--\s*)?TMPL_NOW\s+FORMAT=(["'])(.*?)\1\s*(?:--)?>
}{
strftime( $2, @localtime )
}xgise;
}
__END__
<TMPL_NOW FORMAT="%Y/%m/%d %H:%M:%S">
<!-- tmpl_now format='%Y年%m月%d日 %H時%M分%S秒' -->
表示フォーマットはFORMAT属性で指定します。POSIX::strftime()にそのまま渡されます。あくまでサンプルなので、あまり複雑にならないようにしています。正規表現はもう少し工夫した方がいいのかも?
cache系のオプションを使うと、多分最初に実行されたときの日時で固定になると思うので注意しましょう。
TMPL_VARで設定した日時データを表示する目的には使えません。