in reply to Re^2: Strange Global Array issue
in thread Strange Global Array issue

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}); }

Replies are listed 'Best First'.
Re^4: Strange Global Array issue
by topher (Scribe) on Apr 16, 2013 at 17:39 UTC

    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.

    Christopher Cashell