Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
For loop - checked once, or evety time? Ruby v Perl comparison and contrast

Although may aspects of Ruby are inherited (in a non-OO way!) from Perl, there are some distinct differences too; a classic for loop in Perl has its end condition checked every time around the loop, but a Ruby for loop sets up an iterator at the start, so that if something changes within the loop evaluation context, the loop does not dynamically adjust. Let me show you an example.

Here's a for loop in Ruby:

stuff = ["Tom","Dick","Harriet"]
 
for v in 0...stuff.length do
  print "#{v+1} ... #{stuff[v]}\n"
  stuff[stuff.length] = "Bob"
  end
  
p stuff


In which the loop runs 3 times because that's the number of times that's calculated before the loop starts.

Dorothy-2:ra10 grahamellis$ ruby evalo.rb
1 ... Tom
2 ... Dick
3 ... Harriet
["Tom", "Dick", "Harriet", "Bob", "Bob", "Bob"]
Dorothy-2:ra10 grahamellis$ ]


But in Perl, using the classic from, to, step, the end condition is checked every time. So if we write the equivalent code in Perl:

@stuff = ("Tom","Dick","Harriet");
  
for ($v=0; $v<@stuff; $v++) {
  print "$v >>> $stuff[$v]\n";
  $stuff[@stuff] = "Bob";
  }
  
print ("@stuff\n");


we get an infinite loop:

Dorothy-2:ra10 grahamellis$ perl evalo.pl
0 >>> Tom
1 >>> Dick
2 >>> Harriet
3 >>> Bob
4 >>> Bob
5 >>> Bob
6 >>> Bob
7 >>> Bob
8 >>> Bob
9 >>> Bob
etc ...


Which is right? Neither - or both - depending upon how you think of it. They're different - and if you're writing a loop which modifies its end condition in any language, you need to be sure how it will behave. Perhaps it would be better for me to suggest to you that loops that dynamically change there end point in this way are best acoided!

(written 2010-04-07, updated 2010-04-08)

 
Associated topics are indexed under
R104 - Ruby - Control Structures
  [3422] Assigning values to variables within other statements - Ruby - (2011-09-07)
  [3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
  [3254] Multiple inputs, multiple out, ruby functions - (2011-04-19)
  [3253] Is this number between? Does this list include? - Ruby - (2011-04-18)
  [3200] How a for loop works Java, Perl and other languages - (2011-03-12)
  [3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
  [3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
  [3156] Splitting data reading code from data processing code - Ruby - (2011-02-04)
  [2975] Why do I need brackets in Ruby ... or Perl, Python, C or Java - (2010-09-29)
  [2892] Alternative loops and conditionals in Ruby and Perl - (2010-07-28)
  [2619] Passing code to procedures and yield in Ruby - (2010-02-02)
  [2471] A short form of if ... then ... else - (2009-10-23)
  [2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
  [1904] Ruby, Perl, Linux, MySQL - some training notes - (2008-11-23)
  [1891] Ruby to access web services - (2008-11-16)
  [1887] Ruby Programming Course - Saturday and Sunday - (2008-11-16)
  [1870] What to do with a huge crop of apples - (2008-11-04)
  [1738] Clean code, jump free (Example in Lua) - (2008-08-06)
  [1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
  [1587] Some Ruby programming examples from our course - (2008-03-21)
  [1582] Ruby, C, Java and more - getting out of loops - (2008-03-19)
  [1220] for loop - how it works (Perl, PHP, Java, C, etc) - (2007-06-06)
  [1163] A better alternative to cutting and pasting code - (2007-04-26)
  [995] Ruby's case - no break - (2006-12-17)
  [985] Equality in Ruby - == eql? and equal? - (2006-12-14)
  [962] Breaking a loop - Ruby and other languages - (2006-12-03)
  [960] 1st, 2nd, 3rd revisited in Ruby - (2006-12-02)

P204 - Perl - Conditionals and Loops
  [3004] Increment operators for counting - Perl, PHP, C and others - (2010-10-18)
  [2832] Are you learning Perl? Some more examples for you! - (2010-06-27)
  [2550] Do not copy and paste code - there are much better ways - (2009-12-26)
  [2351] Ternary operators alternatives - Perl and Lua lazy operators - (2009-08-12)
  [1727] Equality and looks like tests - Perl - (2008-07-29)
  [1607] Learning to program in Perl - (2008-04-11)
  [1477] Decisions - small ones, or big ones? - (2007-12-18)
  [1468] Lexical v Arithemetic testing, Bash and Perl - (2007-12-11)
  [1191] Smart English Output - via PHP and Perl ? : operator - (2007-05-18)
  [930] -> , >= and => in Perl - (2006-11-18)
  [353] Wimbledon Neck - (2005-06-20)

P206 - Perl - More Loops and Conditionals
  [3398] Perl - making best use of the flexibility, but also using good coding standards - (2011-08-19)
  [2972] Some more advanced Perl examples from a recent course - (2010-09-27)
  [2967] Multiway branches in Perl - the given and when syntax - (2010-09-22)
  [2824] A pint of Black Rat, and a lazy barman - (2010-06-25)
  [2817] Setting a safety net or fallback value in Perl - (2010-06-19)
  [2815] switch and case, or given and when in Perl - (2010-06-17)
  [1825] Question Mark - Colon operator (Perl and PHP) - (2008-10-08)
  [657] The ternary operator in Python - (2006-03-25)
  [299] What - no switch or case statement? - (2005-05-03)
  [138] Perl - redo and last without a loop - (2004-12-02)


Back to
__index and __newindex in Lua - metatable methods
Previous and next
or
Horse's mouth home
Forward to
A more informed decision than ever before
Some other Articles
Uploading an image, document or pdf via a browser (php)
A simple example - XML from a Ruby program
History is all around us
A more informed decision than ever before
For loop - checked once, or evety time? Ruby v Perl comparison and contrast
__index and __newindex in Lua - metatable methods
Old trackways and routes near Melksham
The bull on the footpath
A walk on the Kennet and Avon
Error trapping in Lua - no exceptions.
3603 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2012: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2711_For ... trast.html • PAGE BUILT: Fri Feb 3 14:16:04 2012 • BUILD SYSTEM: wizard