使用变量访问Template Toolkit中的哈希键

时间:2014-03-12 10:45:45

标签: perl template-toolkit

我有一个内容为

的数组
$VAR1 = {
'1' => 'May 05, 2011',
'0' => 'Jul 22, 2009',
'2' => 'Jun 13, 2012'
};

我试图在催化剂模板中显示它,代码是

[% x = 0 %]
[% FOREACH mortgage IN mortgages %]

<table width=40% border=1 cellspacing="0" cellpadding="10">
    <tr>
        <td>Date</td>
        <td><b>[% dateformat.x %]</b></td>
    </tr>
 </table>
[% x = x+1 %]
[% END %]

dateformat.x应根据x的值显示2011年5月5日或2009年7月22日或2012年6月13日,但错误是它不显示任何内容。它显示一个空白。

我认为错误是数组中的键是一个字符串,而与dateformat一起使用的x的值是数字。如果我使用dateformat添加0或1,则它会正确显示([%dateformat.0%])。

2 个答案:

答案 0 :(得分:8)

[% dateformat.x %]dateformat哈希中查找x的密钥。要告诉模板工具包x是变量,请在其前面添加$

[% dateformat.$x %]
  

要使用存储在另一个变量中的密钥访问哈希条目,请在键变量前加上'$',以便在使用前对其进行插值(参见Variable Interpolation)。

答案 1 :(得分:3)

我感谢您已经提出并回答了这个问题,但是item() VMethod是一个方便的选择。当您的哈希键与VMethods冲突时,这尤其有效:

[%- SET myhash = { last => 'Blues', first => 'Elwood',
                   address => '1060 West Addison', city => 'Chicago' };
    myhash.first; # doesn't do what you want,
                  # because first is a VMethod for 1st element in an array
    myhash.item('first'); # displays "Elwood"
-%]

firstlastsizesort等VMethods是这里粗心的常见陷阱。