It has always struck me that
switch statements in languages like C, PHP, Tcl and Java are very longwinded and clumsy, with a need for blocks and blocks, and every case having to end with a break (or equivalent) to stop multiple cases being run via a drop-through. I can understand
why they were written that way in the first place but ... ouch.
Ruby's case / where, then, is a breath of fresh air. Easy block structure, multiple options allowed (and a special === test that helps make the case selection easy) and no need for those breaks either!
Larry Wall has steadfastly refused requests for a
switch in Perl as you don't need it and ... he agrees with me ... it's clumsy. But Perl 6
will have a
given alternative with
when clauses which works in a similar way to the superb Ruby solution. My hat off to Matz and Larry.
(written 2006-12-17)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
R104 - Ruby - Control Structures [960] 1st, 2nd, 3rd revisited in Ruby - (2006-12-02)
[962] Breaking a loop - Ruby and other languages - (2006-12-03)
[985] Equality in Ruby - == eql? and equal? - (2006-12-14)
[1163] A better alternative to cutting and pasting code - (2007-04-26)
[1220] for loop - how it works (Perl, PHP, Java, C, etc) - (2007-06-06)
[1582] Ruby, C, Java and more - getting out of loops - (2008-03-19)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
[1738] Clean code, jump free (Example in Lua) - (2008-08-06)
[1870] What to do with a huge crop of apples - (2008-11-04)
[1887] Ruby Programming Course - Saturday and Sunday - (2008-11-16)
[1891] Ruby to access web services - (2008-11-16)
[1904] Ruby, Perl, Linux, MySQL - some training notes - (2008-11-23)
[2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
[2471] A short form of if ... then ... else - (2009-10-23)
[2619] Passing code to procedures and yield in Ruby - (2010-02-02)
[2711] For loop - checked once, or evety time? Ruby v Perl comparison and contrast - (2010-04-07)
[2892] Alternative loops and conditionals in Ruby and Perl - (2010-07-28)
[2975] Why do I need brackets in Ruby ... or Perl, Python, C or Java - (2010-09-29)
[3156] Splitting data reading code from data processing code - Ruby - (2011-02-04)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
[3200] How a for loop works Java, Perl and other languages - (2011-03-12)
[3253] Is this number between? Does this list include? - Ruby - (2011-04-18)
[3254] Multiple inputs, multiple out, ruby functions - (2011-04-19)
[3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
[3422] Assigning values to variables within other statements - Ruby - (2011-09-07)
[3619] Ruby v Perl - a comparison example - (2012-02-21)
[3620] Finding the total, average, minimum and maximum in a program - (2012-02-22)
[3769] Muttable v immutable and implications - Ruby - (2012-06-20)
[4322] Learning to Program - the conditional statement (if) - (2014-11-21)
[4323] Learning to program - Loop statements such as while - (2014-11-22)
[4370] Conditionals, loops and methods in Ruby - a primer with simple examples - (2014-12-29)
[4402] Finding sum, minimum, maximum and average in Python (and Ruby) - (2015-01-19)
[4503] Separating your code for easier testing, understanding and re-use; example in Ruby - (2015-06-02)
[4504] Where does Ruby load modules from, and how to load from current directory - (2015-06-03)
[4674] Alternating valuses / flip-flop / toggle - example in Ruby - (2016-05-17)
P256 - Perl 6 Look Ahead [89] When will Perl 6 be available - (2004-10-15)
[113] A Parallel for Perl 6 - (2004-11-09)
[550] 2006 - Making business a pleasure - (2006-01-01)
[582] DWIM and AWWO - (2006-01-30)
[1215] An update on Perl - where is it going? - (2007-06-03)
[1417] What software version do we teach? - (2007-10-31)
[1721] Perl 6 - When will we have a production release? - (2008-07-26)
[2559] Moving the product forward - ours, and MySQL, Perl, PHP and Python too - (2010-01-01)
[2815] switch and case, or given and when in Perl - (2010-06-17)
[2816] Intelligent Matching in Perl - (2010-06-18)
[2817] Setting a safety net or fallback value in Perl - (2010-06-19)
[2967] Multiway branches in Perl - the given and when syntax - (2010-09-22)
[3077] Perl 6 - significantly nearer, and Rakudo looks very good - (2010-12-02)
Some other Articles
Cascading and the busesThe year of the exploding projectorMost recent file in a directory - PHPSetting your colour theme through PHPRuby's case - no breakTraining on Cascading Style SheetsPositioning with Cascading Style SheetsEnthusiastic, but ....Adding a member to a Hash in RubyRuby - Totally Topical