2017-03-15 7 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は、Perl5(Perl6に似た形式を提供する)用のモジュールです。 – 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}, 
     '+=======================================+'; 
関連する問題