Reputation: 103
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
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