我正在使用perl和Template :: Toolkit生成一些文本.在perl程序中,我定义了一个哈希引用,例如
my $user = { "user-name" => "John" };
Run Code Online (Sandbox Code Playgroud)
并传递给它Template::Toolkit以便John用模板文件生成.在我写的模板文件中
[% user-name %]
Run Code Online (Sandbox Code Playgroud)
但不幸的是,user-name似乎被认为是减法表达式(user减号name)Template::Toolkit.
为了证实我的怀疑,我查看了手册,Template::Toolkit找到了在变量名中使用的有效令牌但却一无所获.
所以我的问题是:
你能给出变量名称的有效令牌列表
Template::Toolkit吗?
我可以在模板文件中使用一些"转义方法",以便perl程序中的变量名可以保留user-name吗?
通常,有效的perl变量是有效的模板工具箱变量.
[ A to Z and _ ]a to z,0 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.
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用'user-name'那么你应该这样定义
$ my $user = { "user-name" => "John" };
$ my $data = { user => $user };
Run Code Online (Sandbox Code Playgroud)
你应该在你的tt2文件中访问它,如下所示:
[% user.item('user-name') %]
Run Code Online (Sandbox Code Playgroud)