Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re:x3 Using $_ as a temp var, especially in functions

by grinder (Bishop)
on Oct 23, 2002 at 13:19 UTC ( [id://207379]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Using $_ as a temp var, especially in functions
in thread Using $_ as a temp var, especially in functions

If I had the chance, I would rewrite some_sub to work on lists, which would allow me to say

my @result = some_sub(qw(a b c d));

But I will grant you that that is a somewhat facetious answer, as I understand your question to mean an arbitrarily complicated map code block and not something as simple.

But then were the map code block arbitrarily complicated, I would no longer be using map, but instead I would be using for, which would make the code look like:

my @result; for my $thing(qw(a b c d)) { # complex code block that munges $thing followed by push @result, $thing; }

On the Principle of Least Surprise, by and large I tend to put unsurprising code in maps and greps. That rules out function calls and other invisible things that might play around with $_. for blocks do not suffer from these problems because you can name your own topicalizer (or whatever it's called) with the for my $topic construct. If you stick to this, you can't be bitten by the types of problems you describe.

<update> if you have code running around secretly overloading the + operator, then clobbering $_ is likely the least of your problems. Just because you can write code that dicks around with $_, doesn't mean you should. We'll just have to agree to disagree. Your point is valid and I find no fault with it, I just see things differently.</update>


print@_{sort keys %_},$/if%_=split//,'= & *a?b:e\f/h^h!j+n,o@o;r$s-t%t#u'

Replies are listed 'Best First'.
Re: Re:x3 Using $_ as a temp var, especially in functions
by IlyaM (Parson) on Oct 23, 2002 at 13:49 UTC
    That rules out function calls and other invisible things that might play around with $_.

    Unfortunately in Perl nearly everything can do invisible things that might play around with $_. You think something like $x + $y is safe? Wrong if $x is an object that overloads '+' operator. Or do you think that, say, hash access is safe? Again it may be not if hash is tied. Besides to my taste map and grep constructs often are much more ideomatic than corresponding for construct that I simply don't want to rule out function calls because my code will be less pretty.

    In my opinion there is no excuse for not localizing $_ in a low level code.

    --
    Ilya Martynov, ilya@iponweb.net
    CTO IPonWEB (UK) Ltd
    Quality Perl Programming and Unix Support UK managed @ offshore prices - http://www.iponweb.net
    Personal website - http://martynov.org

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (2)
As of 2024-04-26 05:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found