Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Shift versus Sanity (shift is not like assignment from @_)

by grinder (Bishop)
on Apr 24, 2002 at 18:15 UTC ( #161708=note: print w/replies, xml ) Need Help??


in reply to Shift versus Sanity

Wow, lots of very interesting arguments to both sides of the debate, but no-one appears to have made the point that:
my( $foo, $bar ) = @_;
...is not the same as...
my $foo = shift; my $bar = shift;
The latter approach modifies the parameter list, they are gone. In the former case, they stay around to haunt you, especially if someone else calls a &foo, and what's left of @_ gets passed along. Talk about effects at a distance. One alternative is to never call &foo, but foo() instead. The other alternative is to use the shift approach. (note to self: remember to adopt tye's approach to fetching parameters).

If the routine is small enough I use $_[0] (in which case what $_[0] should contain should be easy to infer from the sub's name). But not everything can be done with $_[0]. If you want to modify it you must fetch the parameter, viz:

sub x { $_[0] =~ s/foo/bar/; $_[0]; } print x('food'), "\n"; # does not work

print@_{sort keys %_},$/if%_=split//,'= & *a?b:e\f/h^h!j+n,o@o;r$s-t%t#u'

Replies are listed 'Best First'.
Re: Re: Shift versus Sanity (shift is not like assignment from @_)
by Anonymous Monk on May 01, 2002 at 13:27 UTC
    If you want to modify it you must fetch the parameter

    I don't know if you include this in "fetch". Technically you might fetch, but I wouldn't like to call it fetching the parameter(s).

    sub foobar { @_ = @_; $_[0] =~ s/foo/bar/; $_[0]; }
    Cheers,
    -Anomo

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2020-11-24 21:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?