2

我在使用模板工具包时遇到了奇怪的行为,比如说我有一个数据结构(在 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 )

使其评估为假。但是,如果我然后将数据结构更改为

( { some => data}, { some => data}, etc )

它总是进入 else (因为它评估 undef 为假)。

除非它们被覆盖,否则似乎有一些变量“溢出”保留在下一次迭代的范围内,这是预期的行为吗?如果是这样,它是否记录在任何地方?

编辑:后来我发现这是导致上述行为的另一个问题,这是由于我在模板的其他地方使用了“ELSEIF”而不是正确的“ELSIF”。如果有疑问,请查看 jira 提出的解决方案,它解决了我在原始帖子中描述的问题。

4

1 回答 1

4

您可以修改模板,如下所示,将循环变量分配给命名散列。然后它将按照您的预期运行。

[%FOREACH ITEM IN ITEMS%]

  [%IF ITEM.FLAG %]
    do something
  [%ELSE%]
    do something else
  [%END%]

[%END%]
于 2010-12-01T21:48:07.223 回答