Я пытаюсь создать хеш из следующего файла примера:
Образец файла:
#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?
$mapHash{key}
будет ссылкой на массив, поэтому вы можете подписать его с помощью$mapHash{key}[0]
и т. д. или разыменовать его, чтобы получить полный массив:@{ $mapHash{key} }
. 22.09.2014