Search code examples
perlhashprintingkey-value-store

Perl :Print values in perl with specific words in values for the key


I have a hash with the following values. It has multiple (2) values for each key.

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%" ] );

So when I am printing it (Current Output), looks like below

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%

*Desired Output * How can I print them without the words excl rules and incl rules. I dont want to repeat them for each project, as I am mentioning it already in the heading.

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%

The current code I am using to print them is :

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

Solution

  • Change this line:

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

    to

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

    }