in reply to Strange Global Array issue

Have you tried to remove the reliance on $_ in your sub?

while (my $line = <DKT>){ # my $line =$_; # process data in here }

Replies are listed 'Best First'.
Re^2: Strange Global Array issue
by Anonymous Monk on Apr 16, 2013 at 14:55 UTC

    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?

      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