2006年07月02日

TMPL_NOW filter

HTML::Templateモジュールのfilterサンプルを紹介します。TMPL_NOWというテンプレートタグを追加して、現在日時を表示するものです。
#!/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で設定した日時データを表示する目的には使えません。
posted by はしもと at 23:20| Comment(0) | TrackBack(0) | Perl
この記事へのコメント

この記事へのトラックバック