2017-03-15 60 views
2

我试图用Perl6::Form打印表格数据,但我不知道如何从散列引用输出数据。这是我到目前为止所尝试的:如何在Perl6 :: Form中使用引用?

#!/usr/bin/perl 
use Perl6::Form; 

my @alerts; 

push @alerts, { site => "192.168.0.1", status => "200", id => "QWE" }; 
push @alerts, { site => "192.168.0.2", status => "500", id => "QER" }; 

print form 
     ' ====================================== ', 
     '| ID   | SITE | STATUS |', 
     '|-------------+------------+-----------|', 
     '| {[[[[[[[[[} |{[[[[[[[[[} | {>>>>>>>} |', 
      \@alerts{id}, \@alerts{site},\@alerts{status}, 
     ' ====================================== '; 
+0

尝试,例如:'$警告[0] - > {网站}'它应该给' “192.168.0.1”' –

+0

我想使用的形式包装和打印所有条目,[HTTP:// search.cpan.org/dist/Perl6-Form/lib/Perl6/Form.pm#Array_data_sources。说实话,我不确定这是可行的。 – mario

+2

@Gregory Nisbet,这是一个Perl 5的问题。 Perl6 :: Form是一个用于Perl 5的模块(提供类似于Perl 6的表单)。 – ikegami

回答

7

您需要平行阵列。

my @ids  = map { $_->{id}  } @alerts; 
my @sites = map { $_->{site} } @alerts; 
my @statuses = map { $_->{status} } @alerts; 

print 
    form 
     '+=======================================+', 
     '| ID   | SITE  | STATUS |', 
     '|-------------+-------------+-----------|', 
     '| {[[[[[[[[[} | {[[[[[[[[[} | {>>>>>>>} |', 
     \@ids,  \@sites,  \@statuses, 
     '+=======================================+'; 

我们可以消除代码重复。

my %dbf; # Data by field 
for my $field (qw(id site status)) { 
    $dbf{$field} = [ map { $_->{$field} } @alerts ]; 
} 

print 
    form 
     '+=======================================+', 
     '| ID   | SITE  | STATUS |', 
     '|-------------+-------------+-----------|', 
     '| {[[[[[[[[[} | {[[[[[[[[[} | {>>>>>>>} |', 
     $dbf{id},  $dbf{site}, $dbf{status}, 
     '+=======================================+'; 
相关问题