On Sun, Nov 04, 2001 at 12:18:38PM -0800, Dave Storrs wrote:
> 
> 
> On Sun, 4 Nov 2001, Gary L. Armstrong wrote:
> 
> > I am amazed. How does someone figure out that you can do this sort of thing?
> >
> > chomp($value[++$i] = <STDIN>);
> >
> > I mean, $value[++$i]?  That really works?  Crazy.  [...]
> 
> 
>       Well, that's mostly a C-style issue (and yes, it is crazy).  C
> programmers, for some bizarre reason, are convinced that there is a
> tremendous shortage of whitespace in the world, and so, rather than
> contribution to the death of the Old Growth Whitespace forests, they will
> go to incredible lengths to jam things onto one line.  Personally, I have
> this thing for clarity.  In my not-even-marginally-humble opinion, a line
> of code should do one thing and one thing only (ok, sometimes I stretch a
> point and do two things, if it is efficient and idiomatic).  In
> particular, I have always despised the "increment a variable inside an
> array index" idiom in C. Therefore, I would have written it as:
> 
>       <STDIN>;
>       chomp;
>       $i++;
>       $value[$i] = $_;
> 
> Some people say "Oh no! Look at that!  You took up 4 lines where only 1
> was needed!  Shame on you!  Gasp, horror, collapse in revulsed
> convulsions."  To which I shrug.  They always thank me later, when they
> need to maintain my code.

Unfortunately, your code doesn't do the same as the original, however
clear it is.

If we're chucking opinions around, I think the first line is pretty
clear to anyone who has programmed Perl for a while.  I'd entertain
arguments for breaking out the increment, if $i was used elsewhere, but
if you're looking to clarify the code I'd probably want to get rid of $i
altogether and use the much more idiomatic push function.

Incidentally, I think the use of constructs like $value[++$i] is usually
more to save cpu time rather than whitespace.  [ Insert standard quote
about premature optimisation here. ]

> Rant mode off.  We know return you to your regularly scheduled list.

You call that a rant?  Here's my prime number generator:

  perl -e 'print"@{[grep{(1x$_)!~/^(11+?)\1+$/}2..shift||1e2]}\n"'

Get your teeth into that ;-)

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to