在模板文件的表达式中使用未初始化的变量时出错

Error while using un-initialized variable in an expression in a template file

我正在尝试使用 template-toolkit 版本 2.29 和 perl 5.28.1 处理模板文件。我在处理模板文件时收到警告
第 xyz 行的参数“”不是数字加法 (+)
我认为这是因为在模板文件中我们有未初始化的变量,这些变量用于算术表达式。
如果使用 template-toolkit 版本 2.29,是否有必要在表达式中使用变量之前对其进行初始化? 在下面的代码中,第 5 行出现警告。

下面是代码片段。

[%- groups = {} -%] <br/>
[%- cols = [ 10, 10, 20, 30 ] -%] <br/>
[%- FOREACH c IN cols -%] <br/>
   [%- val = c -%] <br/>
   [%- groups.$val = groups.$val + 1 -%] <br/>
[%- END -%] <br/>

如果我们在表达式中使用它之前初始化 groups.$val,则没有警告。
我在使用 template-toolkit 2.15 版时没有遇到这个问题。 不确定 2.29(或任何其他大于 2.15 的版本)发生了什么变化导致警告?

这不是错误,是警告。

如果您不想收到警告,只需在分配给变量时填充变量即可:

[%- groups.$val = (groups.$val || 0) + 1 -%]

或者也许

[%- groups.$val = (groups.$val.defined ? groups.$val : 0) + 1 -%]

不幸的是,没有类似于 Perl 的 +++= 的运算符可以像 Perl 的运算符那样跳过警告。