On Wed, 20 Nov 2002, Pense, Joachim wrote: > Bart Lateur [mailto:[EMAIL PROTECTED]] wrote: > (Mittwoch, 20. November 2002 11:43) > > >On Wed, 20 Nov 2002 04:10:02 -0600, Steven Lembark wrote: > > > >>sub commify > >>{ > >> my ( $max, $sep, $end ) = ( shift, shift, shift ); > > ... > >>} > > > >Wow! Hold it! Am I the only one who finds this absurd? More than one > >shift on the same array in one single expressing, sounds like bad style > >to me. Comments? > > In one of my programs, this would be > > sub commify { > my $max = shift; > my $sep = shift; > my $end = shift; > > ... > } > > better or even worse in your view?
Better, but only if it makes sense to conditionally take values off the calling stack, like this contrived example: sub foo { my $type = shift; my $arg1 = shift; my $arg2 = 0; if ($type == 'APIv2') { $arg2 = shift; } return $arg1 + $arg2; } A variation of this would be if, depending on the type, you might want different names for a given element on the calling stack: sub foo { my $type = shift; my $arg1 = shift; if ($type == 'APIv2') { my $adder = shift; return $arg1 + $adder } elsif ($type == 'APIv3') { my $subtractor = shift; return $arg1 - $subtractor; } return $arg1; } You might also do something like this to illustrate that depending on the value of the first argument, we may not even care about any of the rest. sub foo { my $type = shift; if ($type == 'APIv3') { carp "APIv3 unsupported\n"; return; } # perhaps do computationally intensive or transactional stuff here # .. my $arg1 = shift; my $arg2 = 0; if ($type == 'APIv2') { $arg2 = shift; } return $arg1 + $arg2; } Granted, there's no performance benefit, but since certain variables aren't introduced until after the conditional return case, it definitively shows that those values aren't needed unless we pass the condition. I think that using 'shift' as a little faucet that gives you stuff as you need it is rather elegant. --Jeremy -- Jeremy Impson Sr. Associate Network Engineer Investigative Research & Marketing Lockheed Martin Systems Integration email: [EMAIL PROTECTED] phone: 607-751-5618 fax: 607-751-6025