Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: shift vs @_

by Fletch (Chancellor)
on Oct 02, 2006 at 18:24 UTC ( #575923=note: print w/ replies, xml ) Need Help??


in reply to shift vs @_

Well, if you mean why not use things from @_ directly: items in @_ are aliases to the things passed in; if you're not careful you can unintentionally modify something of your caller's.

my $foo = "bar"; sub bad_example { $_[0] =~ s/a/oo/; $_[0] } print "\$foo: $foo\n"; print "bad_example returns: ", bad_example( $foo ), "\n"; print "uh oh, \$foo: $foo\n";

Now if you just mean why not always use the my( $a, $b, $c ) = @_; form vice shift: there's times when you want to pull off some items and then do something list-y with the remaining contents of @_. Best example off the top of my head would be something that builds a hash from key/value pairs like:

sub take_one_and_hash { my $one = shift; my %hash = @_; ## frobulate $one based on %hash . . . }

Unless you pull that first argument off with shift you'd have to do something like @_[1..$#_] which just looks crufty.


Comment on Re: shift vs @_
Select or Download Code
Re^2: shift vs @_
by jasonk (Parson) on Oct 02, 2006 at 19:41 UTC

    Now if you just mean why not always use the my( $a, $b, $c ) = @_; form vice shift: there's times when you want to pull off some items and then do something list-y with the remaining contents of @_. Best example off the top of my head would be something that builds a hash from key/value pairs like:

    Another good example is subclassing...

    sub do_something { my $self = shift; $self->SUPER::do_something( @_ ); # do some more stuff }

    We're not surrounded, we're in a target-rich environment!
Re^2: shift vs @_
by ambrus (Abbot) on Oct 07, 2006 at 11:52 UTC

    I don't usually use shift even if I want to do something with the rest of the arguments. I do, like, my($one, %hash) = @_;.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2015-07-06 06:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (70 votes), past polls