Perl switch 语句
switch 语句允许根据值列表测试变量是否相等。 每个值都称为一个案例,并且为每个 switch case 检查被打开的变量。
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 语句 −
switch 语句采用括号中指定的任何类型的单个标量参数。
该值后跟一个块,该块可能包含一个或多个 case 语句,后跟一个 Perl 语句块。
case 语句采用单个标量参数,并在 case 参数和当前开关值之间选择适当的匹配类型。
如果匹配成功,则执行与 case 语句关联的强制块。
switch 语句可以有一个可选的 else case,它必须出现在 switch 的末尾。 当没有匹配的案例时,可以使用默认案例来执行任务。
如果一个 case 块执行了一个未指定的 next,控制会立即转移到 case 语句之后的语句(即通常是另一个 case),而不是离开周围的 switch 块。
并非每个案例都需要包含 next。 如果没有 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
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