sub foo {
my $zog = shift;
instead of:
sub foo {
my $zog = $_[0];
Because no one re-uses @_, and I don't think most understand how @_ really works. Do people listen? No. Well, some did when I explained how it copies data from @_ needlessly in their code. But, it is still used.
So, today I was debugging some taint errors being throws by a CPAN module, and tracked it down to an internal module. It calls an AUTOLOAD'd method on the CPAN module, which in turn uses @_. If @_ exists, the autoloaded method returns 1, otherwise 0. But, since @_ isn't altered in the calling method, it ALWAYS returns 1 (making it useless) and becomes taint-unsafe since the autoloading tries to eval on the value from @_.
So kids, when someone explains to you that one thing isn't as good as another, please listen! It could save time from fixing broken code in the future.
Always use shift? (Score:2)
Curiously, Ben Tilly mentioned that at least one company would ding you on a code review for using shift [perlmonks.org].
Don't you think that you've just found a special case? Unless I misunderstood you, you would dislike the following:
my ($self,$user,$pass,$action) = @_;
For the that example, it seems clearer to use @_ rather than shift four times. It's clean and concise, though one might argue about the interface.
my ($class, @args) = @_;
How would you recommend using shift for that? It
Re:Always use shift? (Score:2)
Most things I write lately uses named params anyways. So there is only 1 or 2 shifts (2 if it is an object, for $self and the
Re:Always use shift? (Score:2)
KM wrote: Most things I write lately uses named params anyways.
Hmm... perhaps you might be the target audience for what is arguably my most useless module [cpan.org] (Sub::NamedParams).
Of course, if I ever get the courage to upload Acme::Code::Police [perlmonks.org], then that will qualify as my most useless module. I've been hesitant to do so due to potential hate mail -- not to mention lawsuits :)
Re:Always use shift? (Score:2)
I still have to upload my Acme::ReturnOne and Acme::ReturnZero to be the two most useless CPAN modules.... EVER!!