在Perl模板中访问哈希

时间:2012-02-20 08:02:11

标签: html perl templates hash cgi

使用Perl的HTML::Template模块时如何访问哈希中的变量?

我在Perl代码中构建以下哈希:

# Load success/error flash messages
if ($query->param("submit")) {
  $template->param(
    FLASH => {
      CLASS => "success",
      MESSAGE => "Your cart has been successfully updated!"
    }
  );
}

我想在我的模板中访问这些变量。要访问常规变量,请执行以下操作:

<TMPL_VAR NAME=FLASH>

我如何在模板中访问FLASH [&#39; CLASS&#39;]?

3 个答案:

答案 0 :(得分:2)

使用。访问。 (点)

FLASH.CLASS

答案 1 :(得分:1)

文档中没有任何内容表明您可以将参数设置为hashref。最接近你想要做的是将hashref放在arrayref:

$template->param(
    FLASH => [ {
        CLASS => "success",
        MESSAGE => "Your cart has been successfully updated!"
    } ]
);

然后您可以按以下方式访问它:

<TMPL_LOOP NAME=FLASH>
  <TMPL_VAR NAME=CLASS>
  <TMPL_VAR NAME=MESSAGE>
</TMPL_LOOP>

但是拥有一个包含单个元素的数组可能会有点过分。另一种方法是去除hashref并使结构变平:

$template->param(
    FLASH.CLASS   => "success",
    FLASH.MESSAGE => "Your cart has been successfully updated!"
);

...

<TMPL_VAR NAME=FLASH.CLASS>
<TMPL_VAR NAME=FLASH.MESSAGE>

答案 2 :(得分:1)

HTML :: Template总是需要散列数组散列数组,依此类推。 如果你有一个任意的数据结构,你可能想尝试HTML :: Template :: Compiled,你可以使用点语法(免责声明:我是作者)

还有HTML :: Template :: Plugin :: Dot,但我从来没有对它进行测试,似乎有点受限。