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} %>
.
我正在尝试将 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} %>
.