Welcome to Rocteur Thursday, April 18 2024 @ 08:43 PM CEST
What is the difference between a for and a foreach loop ?Back in the early days of Perl, Larry Wall decided to borrow from both C (the "for" loop) and Csh (the "foreach" loop) to provide a means of a computed iterator or a simple list enumeration.
Apparently, he noticed that Perl could always distinguish (by the contents of the parentheses part of the statement) whether a for-loop or a foreach-loop was needed, Larry decided to make the keywords interchangable, simply because they were both "iterators" and the more common of the two loops (the foreach loop) could be spelled with 4 fewer characters.
In the early documentation (the first Camel which I wrote with Larry, and the first Llama), we were very careful to describe the aliasing of the keyword, but *also* very careful to always use the proper keyword for the loop type in every example, just to make sure it was clear to the early Perl users that these really are two distinct types of loop.
Later documentation that has come along (*not* written by me or Larry) has more sloppily merged the two, and made it more confusing, I think. I can predict followups to my message here that argue the opposite of what i'm saying. Rest assured, *they* were *not* there in the beginning, nor have had as much time sitting across the dinner table with Larry himself as I have had, so I speak from authority on this matter.
To summarize: the "for" loop is from C, and looks like:
for (initializer; test; incrementor) { body }
The "foreach" loop is from csh, and looks like:
foreach $optional_iterator (list) { body }
However, you can spell "for" as "foreach" and vice versa, and Perl won't care... it'll correct for your misspelling. :)
-- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 Smalltalk/Perl/Unix consulting, Technical writing, Comedy, etc. etc. See http://methodsandmessages.vox.com/ for Smalltalk and Seaside discussion
FAQ Manager » Perl » What is the difference between a for and a foreach loop ?
|