如何解决模板工具包中的Perl多维哈希
我有以下perl多维哈希,它是从Dancer传递给Template Toolkit的哈希参考。我在弄清楚如何在Template Toolkit中显示它时遇到了麻烦。
$VAR1 = {
'TylerMontgomery(2022)' => {
'so' => 1,'bb' => 1,'rbis' => 0,'atbats' => 7,'runs' => 2,'hits' => 2
},'ChaseLangan(2022)' => {
'runs' => 4,'hits' => 4,'atbats' => 5,'bb' => 0,'rbis' => 2,'so' => 1
},'BryceJones(2021)' => {
'hits' => 2,'atbats' => 4,'rbis' => 4,'so' => 1
},'WillGrimes(2021)' => {
'bb' => 0,'so' => 1,'runs' => 1,'hits' => 2,'atbats' => 3
},};
我可以使用以下代码插入我的perl代码中的哈希值:
foreach my $name (sort keys %season) {
printf "%-27.27s","$name: ";
foreach my $stat (sort keys %{ $season{$name} }) {
printf "%-12.12s","$stat: $season{$name}{$stat} ";
## cal. avg
$season{$name}{AVG} = $season{$name}{hits} / $season{$name}{atbats};
}
printf "%4s %.3f\n","avg:",$season{$name}{AVG};
}
到目前为止,我尝试显示的内容似乎有些偏离。任何帮助将不胜感激。
<table style="width:100%; line-height:40px;">
<% FOREACH Season = Season %>
<tr>
<td width="5">Season.key <% Season.key %></td>
<td width="5">Season.val <% Season.value %></td>
<td width="5">Season.val.atbats <% Season.value.atbats %>
<td width="5">Season.val.hits <% Season.value.hits %>
</tr>
<% END %>
</table>
最终在网页上显示的内容:
HASH(0xabd1ef4)HASH(0xabd1ef4)
Season.key Season.val Season.val.atbats Season.val.hits
解决方法
FOREACH
遍历数组。迭代hash.keys
返回的数组。
<% FOREACH id IN payload.keys %>
<% season = payload.$id %>
<p><% season.runs %></p>
<p><% season.atbats %></p>
<% END %>
完整代码:
use Template qw( );
my %seasons = (
'TylerMontgomery(2022)' => {
'so' => 1,'bb' => 1,'rbis' => 0,'atbats' => 117,'runs' => 2,'hits' => 2
},'ChaseLangan(2022)' => {
'runs' => 4,'hits' => 24,'atbats' => 5,'bb' => 0,'rbis' => 2,'so' => 1
},'BryceJones(2021)' => {
'hits' => 2,'atbats' => 4,'bb' => 2,'rbis' => 4,);
my $tt = Template->new({
START_TAG => '<%',END_TAG => '%>',});
my $template = <<'__EOS__';
<!DOCTYPE html>
<html lang="en">
<head>
<!-- head definitions go here -->
<meta charset="utf-8">
</head>
<body>
<div class="container" style="margin-top:20px;">
<% FOREACH id IN seasons.keys %>
<% season = seasons.$id %>
<p><% season.runs %></p>
<p><% season.atbats %></p>
<% END %>
</div>
</body>
</html>
__EOS__
$tt->process(\$template,{
title => 'Get Softball Season Stats',seasons => \%seasons,})
or die($tt->error);
输出
<!DOCTYPE html>
<html lang="en">
<head>
<!-- head definitions go here -->
<meta charset="utf-8">
</head>
<body>
<div class="container" style="margin-top:20px;">
<p>4</p>
<p>5</p>
<p>2</p>
<p>117</p>
<p>2</p>
<p>4</p>
</div>
</body>
</html>
注意:集合和各个季节都不要使用season
。我使用了更好的变量名称,您应该调整数据以使其匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。