_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Straipsniai/switch perle
Kaip žinia, Perlo kalboje nėra switch konstrukcijos. Gal kam ir keista, bet yra keletas (kaip
visada Perle yra keletas būdų atlikti tam pačiam daiktui ;) būdų kaip apsieiti be to. Pirmas
būdas gana man bjaurokas, nes naudoja goto (nors šiaip tai labai primena įprastą switch:

SWITCH:{ # switch($option)
    $_='CASE_'.$option; eval("goto $_"); $_= 'DEFAULT' if ($@); goto $_;

        CASE_1:    print "Case 1\n";
                last SWITCH;
        CASE_4:    print "Case 4:\n";
                last SWITCH;
        CASE_FOUR:    print "Case FOUR\n";
                last SWITCH;
        CASE_9:    print "Case 9\n";
                return "Because I can";
        CASE_WHAT:    ;
        CASE_STR:    print "Case STRING on $option\n";
                last SWITCH;
        DEFAULT:    print qq|Undefined Case "$option"\n|;
    }    

Dažniausiai naudojama nuorodų lentelė (dispatch table):

my %switch = (
    default             => \&list_ads ,
    submit_payment      => \&save_payment ,
    set_duration        => \&set_duration ,
    go_here             => sub {print 'hi'},
);
$switch{$value} ?
    $switch{$value}->() :
    $switch{'default'})->();

Dar vienas būdas:

for ($val)
{
    /^1$/       && do { do_something };
    /^abc$/     && do { do_something_else };
    /^d{2,4}$/ && do { do_something_further };
}

Arba galima naudotis Switch moduliu. There is more than one way to do it.
algirdas@perl.lt 2005.04.11 - $dabar