Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^2: subroutine function

by tobyink (Abbot)
on Oct 11, 2012 at 19:55 UTC ( #998525=note: print w/ replies, xml ) Need Help??


in reply to Re: subroutine function
in thread subroutine function

my $left=$_[0]; my $right=$_[1];

which is the same as

my $left = shift @_; my $right = shift @_;

It is not the same at all. The first version doesn't modify @_. The second one does modify it. The difference is often very important. (For example, if you're planning on using goto.)

use Test::More; use Data::Dumper; sub func1 { my $left=$_[0]; my $right=$_[1]; goto \&Data::Dumper::Dumper; } sub func2 { my $left = shift @_; my $right = shift @_; goto \&Data::Dumper::Dumper; } my @args = qw( a b ); # Are they the same?? is( func1(@args), func2(@args), "they're the same!", ); done_testing();
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'


Comment on Re^2: subroutine function
Select or Download Code
Re^3: subroutine function
by runrig (Abbot) on Oct 11, 2012 at 20:43 UTC
    The difference is often very important.

    And the difference often doesn't matter at all. As in the OP's example. In which case they are essentially the same. Similar. Whatever. Yes, I know what the difference is; I often pass @_ to other methods after shifting off the object. And often I don't.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (12)
As of 2014-08-22 20:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (164 votes), past polls