使用Perl的Template.pm,我如何从数组中选择一个随机元素并输出它?

时间:2009-12-10 14:58:59

标签: perl template-toolkit

假设我的模板中有以下内容:

[%- pages = [ 'one', 'two', 'three' ] -%]

<p>Go to page [%- ... -%]</p>

假设EVAL_PERL 设置(即,我无法使用[%- PERL -%]块),我需要将哪些内容放在[%- ... -%]以上,以便得到以下输出?

<p>Go to page "a randomly picked element of pages"</p>

2 个答案:

答案 0 :(得分:9)

默认情况下,模板中没有rand支持,因此您必须通过其他代码(如Slash)或Template::Plugin::Math导入它,例如:< / p>

[%- USE Math -%]

[%- pages = [ 'one', 'two', 'three' ] -%]

<p>Go to page [%- pages.${ Math.rand(pages.size) } -%]</p>

输出:

$ tpage test.html
<p>Go to page three</p>

答案 1 :(得分:4)

如果我必须做任何复杂的事情,我只使用[%PERL%]部分并跳过Template Toolkit语法。

此外,我尽可能多地在控制器中找出并传递要使用的值的数据结构。我尝试永远不要在模板中选择值或创建新值。将逻辑移入模板后,如果有另一组模板,则必须重新定义它。