【发布时间】:2013-04-30 20:40:02
【问题描述】:
问题的简短版本:
有没有办法从提供给流程调用的模板中获取 $var-hash(不是它的子变量)
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 转换为哈希树。不同的(独立的)模板适用于该树的不同部分(不同级别)。子模板收集有关该树部分的一些附加信息。 现在我想在这个模板中使用子模板,但是一些模板在树的一个节点上工作
例子
A
+-Bs
+- b1
+- i
+- c
+- b2
+- i
+- c
+- b3
+- i
+- c
这棵树被转换成一个哈希,直接作为 $vars 给出 模板 TA 工作整个哈希(模板看到变量 Bs) 模板 TB 在一个 B-Node 上工作,并且只获取这个节点(模板见 i anc c)
我想编写一个 BLOCK,它接受一个 B 节点并对其进行操作。 这个块应该可以从 TA 和 TB 使用,所以我正在寻找一种在不更改生成器脚本的情况下获得完整环境的方法。
【问题讨论】:
-
$tt->process('myfile', { root => $vars })怎么样? -
我尝试在脚本端添加
$vars->{varRoot} = $vars;并将 varRoot 赋予子模板。 但是: 如果块通过向该哈希添加条目来更改 varRoot,则这些条目不能通过全局名称空间从模板访问,而只能通过 varRoot 访问。在模板处理后转储哈希表明哈希已正确更新,但似乎 ptk 确实以不同方式处理存储的根对象。
标签: perl template-toolkit