SPUG: English-speak about Perl-speak "for" loops

Jack Foy jack at foys.net
Sat Sep 16 01:24:51 PDT 2006


Ingy dot Net wrote:
> Jack Foy wrote:
> > I assert that using the C-style for-loop is un-Perlish.  In most cases,
> > if you're numerically indexing your arrays, you're missing a better way
> > of expressing the code.
> 
> How would you better express:
> 
>     for (my $i = 0; $i < @array - 1; $i++) {
>         $array->[$i + 1] += $array[$i];
>     }
> 
> The C style loop has its place in Perl.

Granted -- as do numerically indexed arrays!

I'll clarify the assertion a little: for most code written by most
people, foreach semantics provide a much more natural means of
expression than do C-style loops on a numeric index.

When we refactor code during reviews, this is one of the first points of
style I notice; it consistently provides a high rate of return in
clarity gained versus effort spent.  It also frequently reveals that the
entire operation further reduces cleanly to a map or grep statement,
which a traditional for-loop can obscure.

Thinking about Michael's original question: I might read the statement

	for my $element (@list) {

as "for my dollar element in at list open block", while

	for (my $i = 0; $i < @list; ++$i) {

might read "for open paren my dollar i gets zero, loop while dollar i
less than at list, plus plus dollar i close paren open block".  That's
wordy and leaves some syntax implied, but I use the construct so seldom
it hasn't been of benefit to optimize it.

-- 
Jack Foy <jack at foys.net>


More information about the spug-list mailing list