打印多个哈希值

Printing multiple hash value

昨天,我问是否可以打印出这样的东西。 LINK:

元素A1和B1有相同的key,这也与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: $k\n";
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