Perl Mason2 传递数组和散列

Perl Mason2 passing arrays and hashes

我正在尝试将 Mason2 与 Dancer 一起使用,将字符串传递给模板等琐碎的情况工作正常:

get '/foo', sub {
    template 'foo' => {
        title => 'bar'
    };
  };
    <%args>
    $.title
    </%args>
    <h1><% $.title %></h1>

所以,这是有效的。当我想将散列或数组之类的东西传递给模板时,麻烦就开始了。 当我将此数组传递给模板时:

template 'index', {  cats=> [{id=>1,title=>'Cat1'},{id=>2,title=>'Cat2'}]};

并将模板中的参数设置为

<%args>
$.cats
</%args>

我不能像这样遍历这个数组:

<ul>
% foreach my $cat ($.cats){
<li><% $cat %></li>
% } 
</ul>

$cat对象和$.cats对象一样,都是一个数组。 我不确定我做错了什么。

谢谢。

Borodin 完全正确。 $.cats 是一个数组引用;要遍历元素,您必须取消引用它:

<%args>
$.cats
</%args>

<ul>
% foreach my $cat ( @{$.cats} ) {
  <li><% $cat->{title} %></li>
% }
</ul>

输出:

<ul>
  <li>Cat1</li>
  <li>Cat2</li>
</ul>

注意 <% $cat %> 在标量上下文中计算 $cat 并输出它;因为 $cat 是一个散列引用,这将输出类似 HASH(0x4b9fad8) 的内容。要从散列中输出项目,您必须按键访问它们,例如<% $cat->{id} %>.