http://www.perlmonks.org?node_id=575946


in reply to shift vs @_

I can think of one reason not yet mentioned: Multi-line shift makes patches more readable. Imagine you have:

sub blah { my $foo = shift; my $bar = shift; }

If I want to add another argument (maybe at this point I should consider hash-based arguments as above, but let's assume I can't, maybe for backwards compatibility), I might rewrite this as:

sub blah { my $foo = shift; my $bar = shift; my $baz = shift; }

The patch to add this argument only contains one additional line with the new argument, making the code easier for people reviewing changes in your version control system or reviewing patches before committing them.

If you change my ($foo, $bar) = @_; to my ($foo, $bar, $baz) = @_; traditional patch/diff output shows one line removed and one added which makes it a little less clear that the change does nothing other than add one new argument.