我正在尝试从以下示例文件创建哈希:
示例文件:
#NewName OldName
Axc.Sx2.1_Axc.Wx2.1 1BDER
Axc.Sx2.1_Axc.Wx2.1 1ADER
Axc.Wxx.5 1DDER
哈希的键应为newName
,值应为oldname
。下面的代码适用于文件中唯一的行:
while (<$mapF>) {
chomp $_;
next if /^\s*(#.*)?$/;
next if /^\s+.*$/;
##latestRuleName OldRuleName
if ( $_ =~ /(\S+)\s+(\S+)/gi ) {
# create list and apped $2
$mapHash{$1} = $2;
}
}
foreach ( keys %mapHash ) {
print "$_\n";
}
但对于重复的条目(如上面代码段中的第1行和第2行),第一个条目会被第二个条目覆盖。因此,我的哈希中只有两个条目:
Axc.Sx2.1_Axc.Wx2.1
Axc.Wxx.5
有没有办法在mapHash中获取所有三个条目?
答案 0 :(得分:4)
哈希中的键必须是唯一的。您可以为每个键存储多个值,但它称为阵列哈希或HoA。这意味着每个键都存储一个数组引用:
push @{ $mapHash{$1} }, $2;
答案 1 :(得分:0)
您还可以使用Tie::Hash::MultiValue CPAN模块,该模块为每个键存储多个值