简体   繁体   English

模板工具包中的 Perl 多维 Hash

[英]Perl Multidimensional Hash in Template Toolkit

I have the following perl multidimensional hash that is passed from Dancer to Template Toolkit as a hash reference.我有以下 perl 多维 hash 作为 hash 参考从 Dancer 传递到模板工具包。 I am having trouble figuring out how to display it in 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,
                            'runs' => 2,
                            'atbats' => 4,
                            'bb' => 1,
                            'rbis' => 4,
                            'so' => 1
                          },
          'WillGrimes(2021)' => {
                                   'bb' => 0,
                                   'rbis' => 0,
                                   'so' => 1,
                                   'runs' => 1,
                                   'hits' => 2,
                                   'atbats' => 3
                                 },
};

I am able to interate the hash within my perl code with the following:我可以在我的 perl 代码中使用以下代码对 hash 进行交互:

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

What I have tried so far for displaying it seems to be somewhat off the mark.到目前为止,我为展示它所做的尝试似乎有些不合时宜。 Any help would be greatly appreciated.任何帮助将不胜感激。

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

What ends up getting displayed on web page:最终在 web 页面上显示的内容:

HASH(0xabd1ef4)HASH(0xabd1ef4)
Season.key  Season.val  Season.val.atbats   Season.val.hits 

FOREACH iterates over an array. FOREACH遍历一个数组。 Iterate over the array returned by hash.keys . hash.keys返回的数组。

<% FOREACH id IN payload.keys %>
   <% season = payload.$id %>
   <p><% season.runs %></p>
   <p><% season.atbats %></p>
<% END %>

Full code:完整代码:

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,
            'runs' => 2,
            'atbats' => 4,
            'bb' => 2,
            'rbis' => 4,
            'so' => 1
        },
);


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);

Output Output

<!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>

Note: Don't use season for both the collection and the individual seasons.注意:不要对集合和单个季节都使用season I used better variables names, and you should adjust your data to match.我使用了更好的变量名称,您应该调整数据以匹配。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM