Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python and Tcl - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Lua, etc
 
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 as below, or enter http://melksh.am/nnnn for individual articles
P204 - Perl - Conditionals and Loops
  [4323] Learning to program - Loop statements such as while - (2014-11-22)
  [4322] Learning to Program - the conditional statement (if) - (2014-11-21)
  [4031] Showing what programming errors look like - web site pitfall - (2013-03-06)
  [3895] Flowchart to program - learning to program with Well House - (2012-10-14)
  [3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
  [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)
  [1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
  [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
  [3914] While, for, foreach or something else to loop. - (2012-11-06)
  [3619] Ruby v Perl - a comparison example - (2012-02-21)
  [3398] Perl - making best use of the flexibility, but also using good coding standards - (2011-08-19)
  [3200] How a for loop works Java, Perl and other languages - (2011-03-12)
  [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)
  [2892] Alternative loops and conditionals in Ruby and Perl - (2010-07-28)
  [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)
  [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)
  [962] Breaking a loop - Ruby and other languages - (2006-12-03)
  [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)

R104 - Ruby - Control Structures
  [4674] Alternating valuses / flip-flop / toggle - example in Ruby - (2016-05-17)
  [4504] Where does Ruby load modules from, and how to load from current directory - (2015-06-03)
  [4503] Separating your code for easier testing, understanding and re-use; example in Ruby - (2015-06-02)
  [4402] Finding sum, minimum, maximum and average in Python (and Ruby) - (2015-01-19)
  [4370] Conditionals, loops and methods in Ruby - a primer with simple examples - (2014-12-29)
  [3769] Muttable v immutable and implications - Ruby - (2012-06-20)
  [3620] Finding the total, average, minimum and maximum in a program - (2012-02-22)
  [3422] Assigning values to variables within other statements - Ruby - (2011-09-07)
  [3254] Multiple inputs, multiple out, ruby functions - (2011-04-19)
  [3253] Is this number between? Does this list include? - Ruby - (2011-04-18)
  [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)
  [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)
  [1587] Some Ruby programming examples from our course - (2008-03-21)
  [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)
  [960] 1st, 2nd, 3rd revisited in Ruby - (2006-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.
4759 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, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 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., 2019: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2711_For ... trast.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat