Dar vieno analitiko svetainė

Petras Kudaras

Switch galimybės 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.