2017-03-15 63 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}, 
     '+=======================================+'; 
相關問題