模板工具包哈希值不打印,键不按数字排序

时间:2012-10-30 20:53:22

标签: template-toolkit

从哈希引用开始......

my $my_hash = {};

在循环中构建哈希...

push(@tmp_arr,$val1);
push(@tmp_arr,$val2);
$my_hash->{$index} = \@tmp_arr;

任何密钥的元素都可以正常访问$ my_hash-> {$ index} [0]

我正在传递这样的哈希:

my $vars = {
   myhash => $my_hash                
};

问题1:尝试像这样打印,它正确打印索引但不打印任何值....我很困惑为什么?

[%- FOREACH index IN myhash.keys.sort -%]
    <tt>index number=[%index%]  value_1=[%myhash.$index.0%]  value_2=[%myhash.$index.1%]<tt>
[% END -%]

问题2:排序没有按数字排序,所以我得到1,10,11,12 .... 2,20,21 ......

1 个答案:

答案 0 :(得分:1)

第一个问题可能是由于$ index是指数组位置还是散列键而引起的混淆。我怀疑它可能假设一个数字键属于一个数组。

当您使用可能与其他方法混淆的哈希键时,vmethod item()通常是一种有用的解决方法。我会尝试以下方法:

<tt>index number=[%index%]  value_1=[%myhash.item(index).0%]
    value_2=[%myhash.item(index).1%]
</tt>

第二个问题是easily sorted(如果你原谅双关语):

[%- FOREACH index IN myhash.keys.nsort -%]

顺便说一下,示例末尾还有另一个打开的<tt>标记,但我认为原始代码中的标记是正确的(结束</tt>)。 < / p>