http://perl.lt/swichperle :: /Straipsniai/swich 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.


2005.04.11 - 2012.05.21 © algirdas@perl.lt