cjh*_*cjh 8 perl template-toolkit
所以,如果我给模板工具包一个引用数组作为参数
ARRAY_REF => \@array
Run Code Online (Sandbox Code Playgroud)
然后在模板中包含以下代码
[% IF ( ARRAY_REF ) %]
Do something
[% ELSE %]
Do something else
[% END %]
Run Code Online (Sandbox Code Playgroud)
其他情况永远不会被触发.
用.替换参数代码
ARRAY_REF => @array ? \@array : undef;
Run Code Online (Sandbox Code Playgroud)
似乎解决了这个问题,但我想知道是否有一种方法可以让模板工具包评估一个空数组(通过引用传递)为false,因为我的项目中有很多实例,我相信这个实例正在被使用(如在HTML模板中)亲它按预期工作).
提前谢谢大家的帮助.
mu *_*ort 23
你的ARRAY_REF意志是真实的,因为它是定义的,它在Perl中是真正的价值.通常的方法是检查它是否为真且非空:
[% IF ARRAY_REF && ARRAY_REF.size %]
Do something
[% ELSE %]
Do something else
[% END %]
Run Code Online (Sandbox Code Playgroud)
说出你真正的意思,要求计算机假装更聪明,而不是导致奇怪的惊喜.
你可能会改变TT的真实性概念,但我不认为你会喜欢它或者你可能遇到的各种令人不快的副作用.模板工具包不是HTML模板专业版,在罗马时就像罗马人那样做.
您最好的办法是修复模板,并将额外的工作视为移植过程的一部分.你可以建立一个插件来为你做"真实和非空"的东西.
Ash*_*ley 11
我想.size是你想要的.
perl -MTemplate -le '$t = Template->new; $t->process(\"[% \"O HAI\" IF arrayref.size %]", { arrayref => [] })'
perl -MTemplate -le '$t = Template->new; $t->process(\"[% \"O HAI\" IF arrayref.size %]", { arrayref => [1] })'
O HAI
Run Code Online (Sandbox Code Playgroud)
我还提供了一个空数组ref在普通Perl中是真的 -
perl -le '$abc = []; print "true" if $abc'
true
Run Code Online (Sandbox Code Playgroud)
当你直接这样做时,更明显(也许)为什么它应该是显而易见的 -
perl -le 'print "true" if []'
true
Run Code Online (Sandbox Code Playgroud)