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 を含める必要はありません。 *次*が表示されない場合、制御の流れは後続の場合に_落ちません_。

流れ図

PerlのSwitchステートメント

#!/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