Template Toolkit中的有效变量名称

时间:2013-06-19 08:02:04

标签: perl template-toolkit

我正在使用perl和Template :: Toolkit生成一些文本。在perl程序中,我定义了一个哈希引用,例如

my $user = { "user-name" => "John" };

并将其传递给Template::Toolkit,以便使用模板文件生成John。在我写的模板文件中

[% user-name %]

但不幸的是,user-name似乎被user视为减法表达式name减去Template::Toolkit)。

为了确认我的怀疑,我查看Template::Toolkit的{​​{3}},找到要在变量名中使用的有效令牌,但什么也没找到。

所以我的问题是:

  1. 您能否为变量名称提供有效令牌列表 Template::Toolkit

  2. 我可以在模板文件中使用一些“转义方法”,以便 perl程序中的变量名可以保留user-name

1 个答案:

答案 0 :(得分:7)

通常,有效的perl变量是有效的模板工具包变量。

  • 变量应始终以非数字,非符号字符[ A to Z and _ ]
  • 开头
  • 变量只能包含a to z0 to 9_(下划线)字符。
  • 变量名称不能包含特殊符号(包括'-'符号)。

例如:

$user-name不是有效的perl变量。但 $user_name有效。

以下是perl解释器为您的代码抛出的内容

$ my $user = { user-name => "John" };                                                                                                      
Compile error: Bareword "user" not allowed while "strict subs" in use at (eval 294) line 5.

如果您真的想使用'user-name',那么您应该像这样定义

$ my $user = { "user-name" => "John" };      
$ my $data = { user => $user };

你应该在你的tt2文件中访问它:

[% user.item('user-name') %]