First of all, that did the trick. Thanks!
Second (and more importantly for my understanding of Perl), would you mind explaining why that would be the fix?
| [reply] |
There is only one $_ in your program and you did use it for two different purposes. One has to be careful sometimes with Perl's build-in variables.
From "Modern Perl", page 7: http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
As English gets confusing when you have too many pronouns and antecedents, you must take care mixing uses of $_ implicitly
or explicitly. Uncautious simultaneous use of $_ may lead to one piece of code silently overwriting the value written by another.
If you write a function which uses $_, you may clobber a caller function's use of $_.
UPDATE: In order to make your script more robust overall, you might also want to remove $_ from your outer loop.
foreach my $regex (@regexes){
($fileBodyMatch, $decode ) = checkFileBody ($file, $regex->{bodyre
+gex});
}
| [reply] [d/l] |
The use of $_ in a foreach doesn't add much risk or cause much reduction in the robustness of the code. foreach, like map and grep, will always localize $_ within its scope.
There is only the slight risk of the function mucking with $_ (as the original poster's original function did); however, any function that uses or modifies a non-localized $_ is broken.
| [reply] [d/l] [select] |