Perl模板工具包:获取根变量

时间:2013-04-30 11:44:22

标签: perl template-toolkit

问题的简短版本:

有没有办法从给出进程调用的模板中获取$ var-hash(而不是它的subvars)

my $tt = Template->new({
    VARIABLES => {
        version => 3.14,
        release => 'Sahara',
    },  
});

my $vars = {
    serial_no => 271828,
    i => 0
    c => 1
};

$tt->process('myfile', $vars);

长版:

从模板的角度来看,serial_no,i和c是全局变量,但我也希望通过父哈希访问它。

背景是我们将xml转移到哈希树中。不同(独立)模板适用于该树的不同部分(在不同级别上)。子模板收集有关该树部分的一些其他信息。 现在我想在模板中使用subtemplate,但是一些模板在树的一个节点上工作

例如

A
+-Bs
  +- b1
     +- i
     +- c
  +- b2
     +- i
     +- c
  +- b3
     +- i
     +- c

此树转换为哈希值,并直接以$ vars形式给出 模板TA工作整个哈希(模板看到变量Bs) 模板TB在B节点上工作,只获取此节点(模板看到我和c)

我想写一个BLOCK,它接受一个B-Node并对其进行操作。 该块应该可以从TA和TB中使用,因此我可以在不改变生成器脚本的情况下搜索完整的环境。

1 个答案:

答案 0 :(得分:3)

使用[% PERL %]阻止或使用Template::Plugin::Stash

测试

[% USE Stash %]
[% USE Dumper Indent = 1%]
<pre>[% Dumper.dump_html( Stash.stash() ) %]</pre>

未测试

[% PERL %]
$stash->set( iamthestash => $stash ); ## or call your tree thing
[% END %]