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

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?

Replies are listed 'Best First'.
Re^3: Strange Global Array issue
by hdb (Monsignor) on Apr 16, 2013 at 15:01 UTC

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

      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