in reply to fall through switch/case in perl

The first answer that came to mind was the Switch module, but for some reason it doesn't seem to be behaving as expected. Can anyone tell me why this doesn't do what it looks like it should do?

#! /usr/bin/perl use strict; use Switch 'fallthrough'; sub test_switch { my $val = shift; switch ( $val ) { case 10 { print "a"; } case 9 { print "b"; } case 8 { print "c"; } case 7 { print "d"; } case 6 { print "e"; } case 5 { print "f"; } case 4 { print "g"; } case 3 { print "h"; } case 2 { print "i"; } case 1 { print "j"; } } } test_switch( 10 ); print "\n"; test_switch( 5 ); print "\n"; __END__

Results:

a f

Maybe I'm overlooking something, but I'm failing to see why this isn't doing just what the OP asked for. Please help.


_______________
DamnDirtyApe
Those who know that they are profound strive for clarity. Those who
would like to seem profound to the crowd strive for obscurity.
            --Friedrich Nietzsche

Replies are listed 'Best First'.
Re^2: fall through switch/case in perl
by Zed_Lopez (Chaplain) on Sep 07, 2004 at 16:47 UTC

    I looked at Switch first, too. The thing with Switch 'fallthrough' is that it falls to the next condition, not the next bit of code (like it does in C).

    If each successive condition is inclusive of all its predessors, you can do it with Switch 'fallthrough':

    use Switch 'fallthrough'; sub test_switch { my $val = shift; switch ( $val ) { case 10 { print "a"; } case [9..10] { print "b"; } case [8..10] { print "c"; } case [7..10] { print "d"; } case [6..10] { print "e"; } case [5..10] { print "f"; } case [4..10] { print "g"; } case [3..10] { print "h"; } case [2..10] { print "i"; } case [1..10] { print "j"; } } }

    This is hard to extend beyond the realm of successive integers, of course.