一个 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 语句的规则:
- switch 语句的括号中可以使用任意类型的标量参数。
在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
case 语句后的标量会与 switch 语句的标量进行比较,判断是否相等。
当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
switch 语句可以有一个可选的 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 "数字 10n" }
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 "数字 10n"; next; } # 匹配后继续执行
case "a" { print "string a" }
case [1..10,42] { print "数字在列表中" }
case (@array) { print "数字在数组中" }
case (%hash) { print "在哈希中" }
else { print "没有匹配的条件" }
}
执行以上程序,输出结果为:
数字 10 数字在列表中其他扩展