http://qs321.pair.com?node_id=1214753


in reply to Re^3: Abusing Map
in thread Abusing Map

Never do in a loop, what can be done outside of it.

I agree, and that's why I like, in particular, the for-loop and, less so, map (and let's just pass over the grep) versions that iterate over ranges of 1 .. $#array or 0 .. $#array-1 and so will never enter the loop. (Again, I haven't actually tested all the preceding code in this thread, only stared at it, but it looks ok.)

Wouldn't your version fail for an array with one element?

That depends on the meaning of "fail."

c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @ra = (1); my $i = $#ra; ;; my @rb; $rb[ $i ] = $ra[ $i ] + $ra[ --$i ] while $i > 0; dd \@rb " []
But maybe an operation that iterates pairwise over an array with less than a pair of elements should throw an exception or at least issue a warning. Who can say? Only the Great Specificator above.


Give a man a fish:  <%-{-{-{-<