Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
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 avoiding work at the Monastery: (7)
As of 2014-08-01 10:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Who would be the most fun to work for?















    Results (4 votes), past polls