Perl哈希用法

时间:2014-09-22 07:29:22

标签: perl hash

我正在尝试从以下示例文件创建哈希:


示例文件:

#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中获取所有三个条目?

2 个答案:

答案 0 :(得分:4)

哈希中的键必须是唯一的。您可以为每个键存储多个值,但它称为阵列哈希或HoA。这意味着每个键都存储一个数组引用:

push @{ $mapHash{$1} }, $2;

答案 1 :(得分:0)

您还可以使用Tie::Hash::MultiValue CPAN模块,该模块为每个键存储多个值