in reply to [untitled node, ID 193991]

Best? smartest? A Perl hacker craves not these things ... wait, we do? A Perl hacker craves these things! ;)

Personally, i opt for something like:

sub foo { my ($bar,$baz,@qux) = @_; # yadda yadda yadda }
and not bother with shifting individual values.

UPDATE:
blaze just /msg'ed me with a question (thanks blaze), so maybe i was not completely clear ... So, you don't know how many arguments you are going to deal with. You could always use a for loop like so:

sub foo { print "$_\n" for @_; }
Also, i accidently used $qux, in the first snippet when i meant @qux - erikharrison explains this much better than i can. Out of curiosity Samn, just exactly what are you trying to do?

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)

Replies are listed 'Best First'.
Re: (jeffa) Re: Collecting all values with shift
by cLive ;-) (Prior) on Aug 30, 2002 at 07:20 UTC
    Just a quick appendum. Be careful to make a copy of @_ locally if you are manipulating things a bit, eg:
    #!/usr/bin/perl -w use strict; my @words = ('These','are','words',"\n"); print "Original: @words"; safesub(@words); print "After safe sub: @words"; unsafesub(@words); print "After unsafe sub: @words"; exit(0); sub safesub { print "safesub to uppercase: "; my @uppercasewords = @_; for (@uppercasewords) { tr/a-z/A-Z/; } print "@uppercasewords"; } sub unsafesub { print "unsafesub to uppercase: "; for (@_) { tr/a-z/A-Z/; } print "@_"; } # output Original: These are words safesub to uppercase: THESE ARE WORDS After safe sub: These are words unsafesub to uppercase: THESE ARE WORDS After unsafe sub: THESE ARE WORDS
    Notice how after unsafe sub has been called that @words has changed. If that's not what you're expecting, it can sometimes give you a shock. So unless the sub is very trivial, or you specifically do intend to amend the caller var(s), make sure you make a copy to play with in the sub.

    .02

    cLive ;-)

    --
    seek(JOB,$$LA,0);