【问题标题】:Valid variable name in Template Toolkit模板工具包中的有效变量名
【发布时间】:2013-06-15 16:11:06
【问题描述】:

我正在使用 perl 和 Template::Toolkit 来生成一些文本。在perl程序中,我定义了一个hash ref比如

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

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

[% user-name %]

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

为了证实我的怀疑,我查看了Template::Toolkit 中的the manual 以找到要在变量名中使用的有效标记,但什么也没找到。

所以我的问题是:

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

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

【问题讨论】:

    标签: perl template-toolkit


    【解决方案1】:

    通常,一个有效的 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') %]
    

    【讨论】:

    • 谢谢。 { user-name => "John" } 部分是一个错字,我在问题中修复了它。而[%user.item('user-name') %] 就像一个魅力。真的很感激!
    • 很遗憾,以下划线开头的 TT 变量不会被 TT 扩展。 [% _lang %] 保持为空,尽管变量 hash 确实包含 { _lang => 'some value' }
    猜你喜欢
    • 2011-12-26
    • 2014-11-07
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2012-10-25
    • 2013-04-05
    相关资源
    最近更新 更多