onlyauto has asked for the wisdom of the Perl Monks concerning the following question:
Hi, I have a question/problem regarding regex. So I have a hash of hashes containing strings. The strings each contain some characters, some digits and at the end it contains either one of the suffixes "AAA", "BBB" or "CCC". By using loops and regex I'm trying to access each piece of information and print messages depending on the suffix of each string. The part of the code I'm having problems with looks something like this:
my %hash; # hash of hashes already defined and filled in an earlier pa +rt of code foreach (sort keys %{$hash{$key1}}){ if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+AAA/gi){ print "found1\n"; } if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+BBB/gi){ print "found2\n"; } if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+CCC/gi){ print "found3\n"; } }
I found that the regex has no problem with the data entries containing the suffixes "BBB" and "CCC" but all the suffixes with "AAA" are ignored. So the output looks like this:
found2 found3 found2 found3 ...
I found that if I just copied the 'if' block for the "AAA" suffixes and pasted it directly after the first section, the first regex still doesn't match, but the second one does:
foreach (sort keys %{$hash{$key1}}){ if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+AAA/gi){ print "found1\n"; } # copied from above and changed the output to 'foundx' if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+AAA/gi){ print "foundx\n"; } # if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+BBB/gi){ print "found2\n"; } if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+CCC/gi){ print "found3\n"; } }
The output is as follows:
foundx found2 found3 foundx found2 found3 ...
I have no clue what's going on here... Any help would be appreciated. Thanks!
|
|---|