4

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

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

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

[% user-name %]

但不幸的是,user-name似乎被识别为减法表达式(user减号nameTemplate::Toolkit

为了证实我的怀疑,我查看了手册Template::Toolkit查找要在变量名中使用的有效标记,但一无所获。

所以我的问题是:

  1. 你能给出变量名的有效标记列表 Template::Toolkit吗?

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

4

1 回答 1

7

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

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

例如:

$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') %]
于 2013-06-19T08:15:05.653 回答