in reply to Re: style guidance
in thread style guidance

Don't assign to a global variable without localising it. You just clobbered your parent's data.
Of course, the parent could protect its $_ my using a lexical variable. And so can do_stuff1. local $_ is in idiom I've had no need for the past 2 years.
sub do_stuff1 { my $_ = shift; chomp; say; }
You also wrote:
or even safer:
sub do_stuff1 { local *_; $_ = shift; ... }
Safer? You should test your code if you label it 'safe', or 'safer'. I guess you didn't realize that local *_; also gives you a new value for @_, so you no longer have access to the subs parameters?

Replies are listed 'Best First'.
Re^3: style guidance
by ikegami (Patriarch) on Nov 08, 2009 at 01:56 UTC

    You seem to imply it's not safer. Having a bug doesn't make it unsafe, it's makes it buggy.

    You're also wrong that I don't realize @_ also gets affected. It just slipped through the cracks even though I remembered while I was composing the post. I usually use local * to do aliasing where this isn't a problem. I never localize $_ because it's suppose to be a shortcut but ends up longer.

    Fixed.

    As for my $_, that's new to the current version. Most people who come here don't use the latest version of Perl yet. I was going for a working solution, not a theoretical one. Thanks for mentioning it as an alternative, though.