Perl-switch-statement
提供:Dev Guides
Perl switchステートメント
*switch* ステートメントを使用すると、変数を値のリストと等しいかどうかをテストできます。 各値はケースと呼ばれ、オンになっている変数は、 *switch case* ごとにチェックされます。
- スイッチケースの実装は Switch モジュールに依存し、 Switch モジュールは_Filter
- Util :: Call_および_Text :: Balanced_を使用して実装されており、これらのモジュールを両方ともインストールする必要があります。
構文
Perlプログラミング言語の switch ステートメントの概要は次のとおりです-
use Switch;
switch(argument) {
case 1 { print "number 1" }
case "a" { print "string a" }
case [1..10,42] { print "number in list" }
case (\@array) { print "number in list" }
case/\w+/ { print "pattern" }
case qr/\w+/ { print "pattern" }
case (\%hash) { print "entry in hash" }
case (\&sub) { print "arg to subroutine" }
else { print "previous case not true" }
}
次のルールは、*スイッチ*ステートメントに適用されます-
- switch ステートメントは、括弧で指定された任意のタイプの単一のスカラー引数を取ります。
- 値の後にはブロックが続きます。このブロックには、1つ以上のcaseステートメントの後にPerlステートメントのブロックが続く場合があります。
- caseステートメントは単一のスカラー引数を取り、case引数と現在のスイッチ値の間で適切なタイプの一致を選択します。
- 一致が成功すると、caseステートメントに関連付けられた必須ブロックが実行されます。
- switch ステートメントには、オプションの else ケースを含めることができます。これは、スイッチの最後に表示する必要があります。 デフォルトのケースは、どのケースも一致しない場合にタスクを実行するために使用できます。
- caseブロックが対象外の next を実行する場合、制御は、周囲のswitchブロックからではなく、caseステートメント(つまり、通常は別のケース)の後のステートメントに直ちに転送されます。
- すべてのケースに next を含める必要はありません。 *次*が表示されない場合、制御の流れは後続の場合に_落ちません_。
流れ図
例
#!/usr/local/bin/perl
use Switch;
$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);
switch($var) {
case 10 { print "number 100\n" }
case "a" { print "string a" }
case [1..10,42] { print "number in list" }
case (\@array) { print "number in list" }
case (\%hash) { print "entry in hash" }
else { print "previous case not true" }
}
上記のコードが実行されると、次の結果が生成されます-
number 100
通常、スイッチステートメントではフォールスルーは悪い考えです。 しかし、今フォールスルーケースを考え、我々は next を使用して、この場合のリストである次の一致するケースにコントロールを転送します-
#!/usr/local/bin/perl
use Switch;
$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);
switch($var) {
case 10 { print "number 100\n"; next; }
case "a" { print "string a" }
case [1..10,42] { print "number in list" }
case (\@array) { print "number in list" }
case (\%hash) { print "entry in hash" }
else { print "previous case not true" }
}
上記のコードが実行されると、次の結果が生成されます-
number 100
number in list