Perl switch 语句

switch 语句允许根据值列表测试变量是否相等。 每个值都称为一个案例,并且为每个 switch case 检查被打开的变量。

switch case 的实现依赖于 Switch 模块,而 Switch 模块已使用 Filter::Util::CallText 实现: :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 语句 −

  • switch 语句采用括号中指定的任何类型的单个标量参数。

  • 该值后跟一个块,该块可能包含一个或多个 case 语句,后跟一个 Perl 语句块。

  • case 语句采用单个标量参数,并在 case 参数和当前开关值之间选择适当的匹配类型。

  • 如果匹配成功,则执行与 case 语句关联的强制块。

  • switch 语句可以有一个可选的 else case,它必须出现在 switch 的末尾。 当没有匹配的案例时,可以使用默认案例来执行任务。

  • 如果一个 case 块执行了一个未指定的 next,控制会立即转移到 case 语句之后的语句(即通常是另一个 case),而不是离开周围的 switch 块。

  • 并非每个案例都需要包含 next。 如果没有 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

Fall-though 在 switch 语句中通常是一个坏主意。 但是,现在考虑一个 fall-through 案例,我们将使用 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

❮ Perl 条件语句