> > >> [EMAIL PROTECTED] (Abigail) writes:
> > >>> On Wed, Nov 20, 2002 at 11:42:43AM +0100, Bart Lateur wrote:
> > >>>> 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?
> > >>>
> > >>> Why is that bad style? Many times when people say it's bad style,
> > >>> it's just a case of "beauty is in the eye of the beholder".
> > >>
> > >> It forces the reader to think about associativity and order of evaluation.
> > >> If you've been bitten by unexpected outcomes before you might have to
> > >> try it to make sure it does what you think.
> > >>
> > >> I've used shift, shift before, so I already know. But it would be unfair
> > >> to foist on a junior maintenance programmer, IMHO.
> > >
> > >Associativity?
> >
> > Of the commas. A suitably paranoid programmer is going to wonder whether
> > the results will occur in the expected order if they've not tried before.
> > It won't occur to a novice. And an expert will already know. But someone
> > in between may wonder.
>
> How does an expert know? You say you know because you have tried it. I
> think I know for the same reason, and because I have read the perly.y
> and op.c, but I wouldn't want to stake anything particularly important
> on it.
Agreed. In C, the three shifts could be evaluated in several ways:
1: Shift 1, Shift 2, Shift 3
2: Shift 1, Shift 3, Shift 2
3: Shift 2, Shift 1, Shift 3
4: Shift 2, Shift 3, Shift 2
5: Shift 3, Shift 1, Shift 2
6: Shift 3, Shift 2, Shift 1
which is factorial(number of arguments) - although most compilers take the
first approach. Relying on this order in C is non-portable between
compilers - I've read documentation for one compiler that said it took middle
first (i.e. either 3,4) which is very counter-intutive.
Now, many "Perl" experts will have experience in other languages, such as C
where this is suicidal for portable code. C doesn't specify order, so that
the order of evaluation can be changed for optimisation.
E&OE
Jonathan Paton
=====
s''! v+v+v+v+ J r e P h+h+h+h+ !s`\x21`~`g,s`^ . | ~.*``mg,$v=q.
P ! v-v-v-v- u l r e r h-h-h- !12.,@.=m`.`g;do{$.=$2.$1,$.=~s`h
E ! v+v+v+ s k e h+h+ !`2`x,$.=~s`v`31`,print$.[$v+=$.]
R ! v-v- t H a c h h- !}while/([hv])([+-])/g;print"\xA"
L ! A n o t !';$..=$1while/([^!]*)$/mg;eval$.
__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com