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.

7 Comments

Comments are closed.