TemplateToolkit で 自作プラグインを使う

PerlTemplate-Toolkit-2.19 - comprehensive template processing system - metacpan.org を利用していて、
URLのGETパラメータを生成するとき、& や ? を含んでいるパラメータ値をURLエンコードしたい時に、 TT の Filter である uri を利用しました。
しかし、&, ?, ', " 等がURLエンコードされませんでした。


そこで、自作Pluginを利用した時のログを記録@自分用w

    • モジュール
use strict;
use Template;

my $template = Template->new(
   {
       PLUGIN_BASE => 'Hoge::Template::Plugin',
   }
);

my $output;
$template->process('hoge.tt', {name => 'a&a'}, \$output) or die;

print $output;
package Hoge::Template::Plugin::Encode;

use strict;

use Template::Plugin::Filter;
use base qw( Template::Plugin::Filter );

sub init {
   my $self = shift;    $self->{_DYNAMIC} = 1;
   $self->install_filter($self->{_ARGS}->[0] || 'encode_url');
   $self;
}

sub filter {
   my ($self, $text, $args, $config) = @_;
   my $ret;
   if (defined $text){
       Encode::_utf8_on($text);
       # 忘れたので後で書く
       $ret = $text;
   }
   Encode::_utf8_off($ret);
   $ret;
}

1;
__END__
    • テンプレート
[% USE Encode %]
I am [% name | encode_url %].
    • 出力結果
a#29;a


参考

http://www.hakoniwa.net/tt/