【问题标题】:Perl Mason2 passing arrays and hashesPerl Mason2 传递数组和散列
【发布时间】:2017-03-13 20:00:59
【问题描述】:

我正在尝试将 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 对象一样,都是一个数组。 我不确定我做错了什么。

谢谢。

【问题讨论】:

  • 我不熟悉 Mason,但我很确定 % foreach my $cat ( @{$.cats} ) { 会起作用。

标签: arrays perl dancer mason


【解决方案1】:

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

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

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

输出:

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

注意&lt;% $cat %&gt; 在标量上下文中评估$cat 并输出它;因为$cat 是一个哈希引用,这将输出类似HASH(0x4b9fad8) 的内容。要从哈希中输出项目,您必须通过密钥访问它们,例如&lt;% $cat-&gt;{id} %&gt;.

【讨论】:

  • 谢谢鲍罗丁和ThisSuitIsBlackNot。就是这样
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 2017-02-21
  • 2013-08-12
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2016-06-16
相关资源
最近更新 更多