正在打印多个哈希值



昨天,我问是否可以打印出这样的东西。链接:如何从同一个键打印出不同的值?

元素A1和B1具有相同的密钥,该密钥也与C4D1相同。然而,A1C4配对,并且B1D1配对。非常感谢。

%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

预期输出会喜欢这个

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

所以我试着找出代码,它看起来像这样。

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: $kn";
print "PATH: $hash{$k}[0][0]";
print "LINE: $hash{$k}[1][0]";
}

所以我的问题是如何使数字自动递增,即[0][0][1][0]?我应该像使用C一样使用for loop吗?如果是,我应该如何将其实现到上面的代码中?非常感谢。

轻微的代码修改和问题的解决。

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;
}

输出

$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

最新更新