У меня есть хеш, где ключи и значения взяты из совпадений в регулярном выражении.У меня возникают трудности при извлечении значений с учетом ключей.В интересах краткости и проработки этой проблемы, моя первая версия этого поста я попыталась сократить свою программу до соответствующих частей, но этого было недостаточно, так что вот еще.Переменные и имена файлов были изменены, но синтаксис верен.Хотя определенные регулярные выражения не имеют значения, я включил их по запросу.
use strict;
my %Hash = ();
my $logName = "MyLogName.Log";
open (LOG, '<', $logName) or die ("Couldn't open log ".$logName);
while (my $line = <LOG>) {
chomp $line;
if ($line =~ m/.*-t\s+(.+?),\s+(.+?)$/ix) {
# This print statement shows that I have correctly extracted what I want.
print ("Key::".$1."::Value::".$2."\n");
my $key = $1;
chomp $key;
my $value = $2;
chomp $value;
$Hash{$key} = $value;
}
}
close LOG;
#This shows the hash has been filled correctly. It shows all the keys and values
# I expect to see.
while ( (my $newkey, my @newvalue) = each %Tests) {
print "Key##".$newkey."##NewValue:".$Tests{$newkey}."\n";
}
open (FILE, '<', "file.csv') or die ("Couldn't open csv file");
while (my $newLine = <FILE>) {
chomp $newLine;
if ($newLine =~ m/^(.+?),\s+(.+?)\s*?(.+?)$/ix) {
#This print statment verifies I've captured them correctly
print $1."::".$2."::".$3."\n";
my $val1 = $1;
my $val2 = $2; #This is the same as the key in %Hash
my $val3 = $3;
#For good measure...
print $val1."::".$val2."::".$val3."\n";
my $oldVal = $Hash{$val2};
print "oldVal::".$Hash{$val2}." "; #This line prints only the space
print "\$oldVal::".$oldVal."\n"; #This line prints only the newline
# Intent: put oldVal, val1, and val3 in an array and replace the old value
# in %Hash with the array, so I'd have a hash of arrays.
}
}
close FILE;
Я использую Perl v5.10.1 в Cygwin.Операторы печати проверяют, что ключ, прочитанный из первого файла, идентичен ключу, считанному из второго файла;регулярное выражение выбрало именно то, что я хочу, чтобы они.Хеш глобален.Почему эти операторы print в конце не извлекают значение из хеша, если указан правильный ключ?