语句修饰符如何在Template Toolkit中起作用?

时间:2012-04-20 09:05:48

标签: perl template-toolkit

考虑这些TT命令(按顺序运行):

[% x = "foo" %]        # x == "foo" 
[% x = "bar" IF 1 %]   # x == "bar"
[% x = "bar" IF 0 %]   # x == ""

为什么x被分配给第3个语句中的空字符串?

1 个答案:

答案 0 :(得分:8)

http://template-toolkit.org/docs/manual/Syntax.html#section_Capturing_Block_Output

请注意将此语法与副作用符号结合使用时的一个重要警告。以下指令的行为与预期不符:

[% var = 'value' IF some_condition %]   # does not work

在这种情况下,指令被解释为(为清晰起见而添加间距)

[% var = IF some_condition %]
   value
[% END %]

而不是

[% IF some_condition %]
    [% var = 'value' %]
[% END %]

变量被赋予IF块的输出,如果为真,则返回'value',但如果为false,则返回false。换句话说,以下指令将始终导致'var'被清除。

[% var = 'value' IF 0 %]

要实现预期的行为,该指令应写为:

[% SET var = 'value' IF some_condition %]