Perl 语句修饰符在模板工具箱中是如何工作的?

Perl 语句修饰符在模板工具箱中是如何工作的?,perl,template-toolkit,Perl,Template Toolkit,考虑以下命令按顺序运行: [% x = "foo" %] # x == "foo" [% x = "bar" IF 1 %] # x == "bar" [% x = "bar" IF 0 %] # x == "" 为什么x在第三条语句中被分配到一个空字符串 请注意将此语法与副作用表示法结合使用的一个重要注意事项。以下指令的行为与预期不符: [% var = 'value' IF some_condition %] # does not work 在这种情况下,为了

考虑以下命令按顺序运行:

[% x = "foo" %]        # x == "foo" 
[% x = "bar" IF 1 %]   # x == "bar"
[% x = "bar" IF 0 %]   # x == ""
为什么x在第三条语句中被分配到一个空字符串

请注意将此语法与副作用表示法结合使用的一个重要注意事项。以下指令的行为与预期不符:

[% var = 'value' IF some_condition %]   # does not work
在这种情况下,为了清晰起见,该指令被解释为添加了间距

[% var = IF some_condition %]
   value
[% END %]
而不是

[% IF some_condition %]
    [% var = 'value' %]
[% END %]
该变量被指定为IF块的输出,如果为true,则返回“value”,如果为false,则返回nothing。换句话说,以下指令将始终导致“var”被清除

[% var = 'value' IF 0 %]
为实现预期行为,指令应写成:

[% SET var = 'value' IF some_condition %]
请注意将此语法与副作用表示法结合使用的一个重要注意事项。以下指令的行为与预期不符:

[% var = 'value' IF some_condition %]   # does not work
在这种情况下,为了清晰起见,该指令被解释为添加了间距

[% var = IF some_condition %]
   value
[% END %]
而不是

[% IF some_condition %]
    [% var = 'value' %]
[% END %]
该变量被指定为IF块的输出,如果为true,则返回“value”,如果为false,则返回nothing。换句话说,以下指令将始终导致“var”被清除

[% var = 'value' IF 0 %]
为实现预期行为,指令应写成:

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