Perl Mason2传递数组和哈希

时间:2017-03-13 20:01:00

标签: arrays perl dancer mason

我试图将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设置为

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

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

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

$ cat对象与$ .cats对象相同,是一个数组。 我不确定我做错了什么。

感谢。

1 个答案:

答案 0 :(得分:0)

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} %>