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>
In reply to Re:x3 Using $_ as a temp var, especially in functions
by grinder
in thread Using $_ as a temp var, especially in functions
by BUU
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |