我遇到了模板工具包的奇怪行为,比如我有一个数据结构(在perl中定义并作为参数传递):
( { FLAG => 1, some => data}, { some => data}, etc )
在模板中我有一个像
这样的循环[FOR ITEMS]
[IF (FLAG) ]
do something
[ELSE]
do something else
[END]
[END]
模板似乎永远不会进入else,我可以让它进入else的唯一方法是更改数据:
( { FLAG => 1, some => data}, { FLAG => 0, some => data}, etc )
以便评估为false。 但是,如果我然后将数据结构更改为
( { some => data}, { some => data}, etc )
它总是进入else(因为它将undef评估为false)。
似乎在下一次迭代的范围内有一些“流失”的变量,除非它们被覆盖,这是预期的行为吗?如果是这样的话,可以在任何地方记录下来吗?
编辑: 后来我发现这是导致上述行为的另一个问题,这是由于我使用“ELSEIF”而不是模板中其他地方的正确“ELSIF”。 如果有疑问,请查看jira提出的解决方案,解决了我在原始帖子中描述的问题。
答案 0 :(得分:4)
您可以像下面那样修改模板,将循环变量分配给命名散列。然后它会表现得像你期望的那样。
[%FOREACH ITEM IN ITEMS%]
[%IF ITEM.FLAG %]
do something
[%ELSE%]
do something else
[%END%]
[%END%]