Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Strange Global Array issue

by hdb (Monsignor)
on Apr 16, 2013 at 14:40 UTC ( [id://1028929]=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1028929]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2024-04-23 17:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found