Perl switch 文
1 つのswitchステートメントでは、変数が複数の値のいずれかに等しい場合をテストできます。各値は case と呼ばれ、テストされる変数はそれぞれについてswitch case検査が行われます。
switch case の実行はSwitchモジュールに基づいており、Switchモジュールはデフォルトではインストールされていません。
Switch.pm モジュールのインストール
CPAN を使用してインストール
コマンドウィンドウを開き、cpan コマンドを入力し、次に install Switch コマンドを入力します:
# cpan cpan[1]> install Switch // 安装 cpan[2]> exit // 退出
Ubuntu では apt-get を使用してインストール
sudo apt-get install libswitch-perl
構文
構文形式は次のとおりです:
構文
use Switch;
switch(argument){
case 1 { print "数字 1" }
case "a" { print "文字列 a" }
case [1..10,42] { print "数字はリスト内にあります" }
case (\@array) { print "数字は配列内にあります" }
case /\w+/ { print "正規表現に一致するパターン" }
case qr/\w+/ { print "正規表現に一致するパターン" }
case (\%hash) { print "ハッシュ" }
case (\&sub) { print "子プロセス" }
else { print "以前の条件に一致しない" }
}
以下は switch 文の規則です:
- switchswitch 文の括弧内には任意の型のスカラーパラメータを使用できます。
1 つの switch 内には任意の数の case 文を置くことができます。各 case の後には、比較する値とコロンが続きます。
case 文の後のスカラーは switch 文のスカラーと比較され、等しいかどうかが判断されます。
テスト対象の変数が case 内の定数と等しい場合、case の後に続く文は、breakその文に遭遇するまで実行されます。
switchswitch 文にはオプションを設定できますelse、そのオプションは最後に置かれ、すべての case が一致しない場合に実行されます。
case が一致した後、case 文ブロックのコードが実行され、実行後に switch 文から抜けます。
case が一致した後、引き続き次の case 文を実行する必要がある場合は、next文を追加する必要があります。
フローチャート

例
#!/usr/bin/perl
use Switch;
$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);
switch($var){
case 10 { print "数字 10\n" }
case "a" { print "文字列 a" }
case [1..10,42] { print "数字はリスト内にあります" }
case (\@array) { print "数字は配列内にあります" }
case (\%hash) { print "ハッシュ内にあります" }
else { print "一致する条件がありません" }
}
上記のプログラムを実行すると、出力結果は次のとおりです:
数字 10
次に、nextを使用した例を見てみましょう:
例
#!/usr/bin/perl
use Switch;
$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);
switch($var){
case 10 { print "数字 10\n"; next; } # マッチ後に実行を継続
case "a" { print "string a" }
case [1..10,42] { print "数字はリスト内にあります" }
case (\@array) { print "数字は配列内にあります" }
case (\%hash) { print "ハッシュ内にあります" }
else { print "一致する条件がありません" }
}
上記のプログラムを実行すると、出力結果は次のとおりです:
数字 10 数字在列表中その他の拡張
Perl 条件文