Template Toolkit 中以 '_' 或 '.' 开头的哈希键

对于 Template Toolkit, 在 template 中, 若哈希的键以 '_' 或 '.' 开头,则表明其值是私有的,不能在 template 中显示或跟新, 如果你要显示,那么 Template Toolkit 会返回 undef。

Example data: 
my $vars = { message => "Hello World!",
             _secret => "On the Internet, no-one knows you're a dog",
             thing => { public => 123,
                        _private => 456,
                        .hidden => 789 } };

Example template:  
[% message %] # outputs "Hello World!";

[% _secret %] # no output

[% thing.public %] # outputs "123",

[% thing._private %] # no output

[% thing..hidden %] # ERROR: unexpected token (..)

你可以通过

$Template::Stash::PRIVATE = undef; 

来取消这一特性。


这篇文章: 有用 无用

Template Toolkit怎样传递undef值

在Catalyst中,想用Catalyst::Request中的uri_with方法来去除uri中的某个参数,按理说在模板中应该用:

[% c.req.uri_with({one_param => undef}) %]

这样就可以去除uri中one_param这个参数,结果uri变成了:

http://xxx?foo=bar&one_param=

one_param并没有去掉,通过debug发现Template Toolkit把undef值当""了。

可以这样:

[% c.req.uri_with({one_param => []}) %]

这篇文章: 有用 无用