師匠の散歩

きままにPerlでも

Switch/Case文

Switch文を作成する/ subSwitchCase.cgi

Perlの標準状態では、switch/case文は使えないが、使えるようにする手法がいくつかあるそうだ。

Gien When文

perl 5.10以降でgiven文が使えるようです。Perlのバージョンを調べて使ってください。

use strict;
use feature ':5.10';
my $num;
given ($num) {
    when ([90..100]) { print "A" }
    when ([80..89])  { print "B" }
    when ([60..79])  { print "C" }
    default          { print "D" }
}

Switchモジュール

こちらのSwitchモジュールを使うと、普通にswitch/case文が使えるとのことで、Perlの仕様によってインストールされているか異なるので要注意です。

use strict;
use Switch;
my $val;
switch ($val) {
    case 'abc' { print "1\n" }
    case 'def' { print "2\n" }
    case 'ghi' { print "3\n" }
    else       { print "0\n" }
}

# 正規表現
switch ($val) {
    case /^abc$/ { print "1\n" }
    case /^def$/ { print "2\n" }
    case /^ghi$/ { print "3\n" }
    else         { print "0\n" }
}

switch/case文は、特定文字列に対して、多くの分岐評価を行う場合、まとまった構文とするのに便利だと思う。ただし、if文のような複雑な条件を扱ったりelsifのような条件の変更は、 switch文は苦手だ。数値による分岐を心がけているアルゴリズムであれば、switch/case文が適していると言える。

その他、こういうものが紹介されている。モジュールを使わないswitch/case文の代替としては面白いが、if/elsif/else文の代替としてはイマイチだ。

use strict;
my $val = 3;

SWITCH: {
    $val==5 && do { print "祝日\n"; last SWITCH };
    $val==4 && do { print "振替休日\n"; last SWITCH };
    $val==3 && do { print "国民の休日\n"; last SWITCH };
    print "平日\n";
}

最初気がつかなかったが、中カッコのセンテンスの最後はセミコロンは不要だった。あってもエラーは出ないけどね。仕様がわからないので、説明はここまで。

注意

ActivePerl ver 5.12.4 をインストールしたところ、use Switch;によるスイッチ文が使えなくなった。ActivePerlを使用する際は、別途 Switchモジュールを入手する必要があるようです。前のバージョンで使えたと思ったのは何だったんだろう。。。


subSwitchCase.cgi // Topに戻る // indexに戻る
Copyright(C) since 2010 Grandmaster Last up : 2020/09/18