Alyssa Low
Alyssa Low

Reputation: 103

Printing multiple hash value

Yesterday, I asked if it's possible to print out something like this. LINK: How to print out different values from same key?

The element A1 and B1 has the same key, which is also the same as C4 and D1. However, A1 is paired with C4 and B1 is paired D1. Thank you.

%HASH1

ERROR MESSAGE1 => A1, B1
ERROR MESSAGE2 => A2, B2
ERROR MESSAGE3 => A3, B3
ERROR MESSAGE4 => A4, B4

%HASH2
    
ERROR MESSAGE1 => C4, D1
ERROR MESSAGE2 => C5, D2
ERROR MESSAGE3 => C6, D3
ERROR MESSAGE4 => C7, D4

The expected output would like this

ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: A1
LINE: C4

ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: B1
LINE: D1

So I tried to figure out the code and it looks something like this.

my %errordata;
for my $key (keys %hash1) {
    $errordata{$key} = [ $hash2{$key}, $hash1{$key} ];
}

use Data::Dumper; 
print Dumper \%errordata;
while (my($k,$v) = each %hash){
print "ERROR MESSAGE: $k\n";
print "PATH: $hash{$k}[0][0]";
print "LINE: $hash{$k}[1][0]";
}

so my question is how do I make the numbers increment automatically which is the [0][0] and [1][0]? Should I use a for loop like C? and if so, how should I implement it to my code above? Thank you.

Upvotes: 1

Views: 120

Answers (1)

Polar Bear
Polar Bear

Reputation: 6818

Slight code modification and the problem solved.

use strict;
use warnings;
use feature 'say';

my %hash1 = ( 
    'ERROR MESSAGE1' => ['A1','B1'],
    'ERROR MESSAGE2' => ['A2','B2'],
    'ERROR MESSAGE3' => ['A3','B3'],
    'ERROR MESSAGE4' => ['A4','B4']
);

my %hash2 = (
    'ERROR MESSAGE1' => ['C4','D1'],
    'ERROR MESSAGE2' => ['C5','D2'],
    'ERROR MESSAGE3' => ['C6','D3'],
    'ERROR MESSAGE4' => ['C7','D4']
);

my %errordata;

for my $key (keys %hash1) {
    $errordata{$key} = [ $hash2{$key}, $hash1{$key} ];
}

use Data::Dumper; 
print Dumper \%errordata;

say '--- Loop while --------------';
while (my($g,$w) = each %errordata)
{
    say 
"ERROR MESSAGE: $g
FULL PATH: $errordata{$g}[1][$_]
LINE: $errordata{$g}[0][$_]
" for 0..1;
}

say '--- Loop for ----------------';
for my $k ( sort keys %errordata ) {
    say 
"ERROR MESSAGE: $k
FULL PATH: $errordata{$k}[1][$_]
LINE: $errordata{$k}[0][$_]
" for 0..1;
}

Output

$VAR1 = {
          'ERROR MESSAGE4' => [
                                [
                                  'C7',
                                  'D4'
                                ],
                                [
                                  'A4',
                                  'B4'
                                ]
                              ],
          'ERROR MESSAGE3' => [
                                [
                                  'C6',
                                  'D3'
                                ],
                                [
                                  'A3',
                                  'B3'
                                ]
                              ],
          'ERROR MESSAGE1' => [
                                [
                                  'C4',
                                  'D1'
                                ],
                                [
                                  'A1',
                                  'B1'
                                ]
                              ],
          'ERROR MESSAGE2' => [
                                [
                                  'C5',
                                  'D2'
                                ],
                                [
                                  'A2',
                                  'B2'
                                ]
                              ]
        };
--- Loop while --------------
ERROR MESSAGE: ERROR MESSAGE4
FULL PATH: A4
LINE: C7

ERROR MESSAGE: ERROR MESSAGE4
FULL PATH: B4
LINE: D4

ERROR MESSAGE: ERROR MESSAGE3
FULL PATH: A3
LINE: C6

ERROR MESSAGE: ERROR MESSAGE3
FULL PATH: B3
LINE: D3

ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: A1
LINE: C4

ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: B1
LINE: D1

ERROR MESSAGE: ERROR MESSAGE2
FULL PATH: A2
LINE: C5

ERROR MESSAGE: ERROR MESSAGE2
FULL PATH: B2
LINE: D2

--- Loop for ----------------
ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: A1
LINE: C4

ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: B1
LINE: D1

ERROR MESSAGE: ERROR MESSAGE2
FULL PATH: A2
LINE: C5

ERROR MESSAGE: ERROR MESSAGE2
FULL PATH: B2
LINE: D2

ERROR MESSAGE: ERROR MESSAGE3
FULL PATH: A3
LINE: C6

ERROR MESSAGE: ERROR MESSAGE3
FULL PATH: B3
LINE: D3

ERROR MESSAGE: ERROR MESSAGE4
FULL PATH: A4
LINE: C7

ERROR MESSAGE: ERROR MESSAGE4
FULL PATH: B4
LINE: D4

Upvotes: 1

Related Questions