2014-09-25 39 views
1

我有一个包含以下值的散列值。它有多个(2)每个键的值。Perl:在Perl中打印值,并在键值中使用特定的单词

my %output = ("projectA" => [ "Compliant files excl rules: 456 - 76% 
           Noncompliant files excl rules 142 - 24% " , 
          "Compliant files incl rules: 2910 - 84% 
           Noncompliant files incl rules: 572 - 16%" ], 
       "projectB" => [ "Compliant files excl rules: 345 - 72% 
           Noncompliant files excl rules 123 - 32% " , 
          "Compliant files incl rules: 1234 - 98% 
           Noncompliant files incl rules: 232- 10%" ]); 

所以,当我打印出来(电流输出),看起来像下面

Project Excluding rules        Including rules 
---------------------------------------------------------------------------------------- 
ProjectA Compliant file excl rules: 456 -76% Compliant files incl rules: 2910 - 84% 
     Noncompliant files excl rules: 142-24% Noncompliant files incl rules:572 - 16% 
ProjectB Compliant files excl rules: 345 - 72% Compliant files incl rules: 1234 - 98% 
     Noncompliant files excl rules: 123 - 32% Noncompliant files incl rules: 232- 10% 

*所需的输出*我怎样才能打印出来没有的话excl rulesincl rules。我不想为每个项目重复他们,因为我已经在标题中提到它。

Project Excluding rules        Including rules 
---------------------------------------------------------------------------------------- 
ProjectA Compliant files: 456 -76%     Compliant files: 2910 - 84% 
     Noncompliant files: 142-24%    Noncompliant files:572 - 16% 
ProjectB Compliant files: 345 - 72%    Compliant files : 1234 - 98% 
     Noncompliant files:123 - 32%    Noncompliant files: 232- 10% 

我使用打印它们目前的代码是:

my $key; 
foreach $key (sort keys %output) { 
$html .= "<tr><td>$key</td>"; 
    $html .= "<td>$_</td>" for @{ $output{$key} }; 
    $html .= " </tr>"; 
} 

回答

2

改变这一行:

$html .= "<td>$_</td>" for @{ $output{$key} }; 

for (@{ $output{$key} }) { 
    s/ (ex|in)cl rules//g; 
    $html .= "<td>$_</td>"; 

}

+0

它没有工作。列2和列3中的内容并未全部打印。 – Jill448 2014-09-25 14:55:55

+0

@ sravs448:看我的编辑。 – Toto 2014-09-25 15:07:06

+0

非常感谢。它工作 – Jill448 2014-09-25 15:24:28