【问题标题】:Creating Html table using perl使用 perl 创建 Html 表
【发布时间】:2014-08-31 05:57:53
【问题描述】:

我在 perl 中有一个哈希,它的键是域名,值是对黑名单区域数组的引用,其中域被列入黑名单。目前我正在根据 4 个区域检查域。如果域在特定区域中被列入黑名单我将区域名称推送到数组中。

domain1=>(zone1,zone2)
domain2=>(zone1)
domain3=>(zone3,zone4)
domain4=>(zone1,zone2,zone3,zone4)

我想用 CGI 中的这些值创建一个 HTML 表格,比如

domain-names    zone1    zone2   zone3   zone4

domain1         true     true    false   false
domain2         true     false   false   false
domain3         false    false   true    true
domain4         true     true    true    true

我尝试在 CGI 中使用地图,例如

print $q->tbody($q->Tr([
                           $q->td([
                                   map {
                                         map{
                                             $_
                                            }'$_',@{$result{$_}}
                                       }keys %result
                                  ])         
)

我无法获得所需的输出。我不确定是否在地图中使用 if-else。 如果我手动生成 td,那么我需要为每个条件编写一个单独的 td,例如

If(zone1&&zone2&&!zone3&&!zone4){

  print "<td>true</td><td>true</td><td><false/td><td>false</td>";

  }
  ......

这很乏味。我怎样才能得到那个输出?

【问题讨论】:

    标签: html perl cgi


    【解决方案1】:

    将您的数组哈希转换为哈希哈希。这使得测试特定区域的存在变得更加容易。

    以下演示然后在一个简单的文本表中显示数据:

    use strict;
    use warnings;
    
    # Your Hash of Arrays
    my %HoA = (
        domain1 => [qw(zone1 zone2)],
        domain2 => [qw(zone1)],
        domain3 => [qw(zone3 zone4)],
        domain4 => [qw(zone1 zone2 zone3 zone4)],
    );
    
    # Convert to a Hash of hashes - for easier testing of existance
    my %HoH;
    $HoH{$_} = { map { $_ => 1 } @{ $HoA{$_} } } for keys %HoA;
    
    # Format and Zone List
    my $fmt   = "%-15s %-8s %-8s %-8s %-8s\n";
    my @zones = qw(zone1 zone2 zone3 zone4);
    
    printf $fmt, 'domain-names', @zones;    # Header
    
    for my $domain ( sort keys %HoH ) {
        printf $fmt, $domain, map { $HoH{$domain}{$_} ? 'true' : 'false' } @zones;
    }
    

    输出:

    domain-names    zone1    zone2    zone3    zone4   
    domain1         true     true     false    false   
    domain2         true     false    false    false   
    domain3         false    false    true     true    
    domain4         true     true     true     true    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多