(本文参考博客)
1. Perl条件语句
Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。
if(true) {
#语句块
}else {
#语句块
}
注意:数字 0, 字符串 '0' 、 "" , 空 list () , 和 undef 为 false ,其他值均为 true。 true 前面使用 ! 或 not则返回 false 。
1.1 if 语句
Perl if 语句由一个布尔表达式后跟一个或多个语句组成。
if(boolean_expression){
# 在布尔表达式 boolean_expression 为 true 执行
}
1.2 if-else 语句
一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为 false 时执行。
if(boolean_expression){
# 在布尔表达式 boolean_expression 为 true 执行
}else{
# 在布尔表达式 boolean_expression 为 false 执行
}
1.3 if -elsif else 语句
一个 if 语句后可跟一个可选的 elsif 语句,然后再跟另一个 else 语句。
这种条件判断语句在多个条件的情况下非常有用。
在使用 if , elsif , else 语句时你需要注意以下几点。
-
if 语句后可以跟上 0 个 或 1 个 else 语句,但是 elsif 后面必须有 else 语句。
-
if 语句后可以跟上 0 个 或 1 个 elsif 语句,但它们必须写在 else 语句前。
-
如果其中的一个 elsif 执行成功,其他的 elsif 和 else 将不再被执行。
if(boolean_expression 1){
# 在布尔表达式 boolean_expression 1 为 true 执行
}
elsif( boolean_expression 2){
# 在布尔表达式 boolean_expression 2 为 true 执行
}
elsif( boolean_expression 3){
# 在布尔表达式 boolean_expression 3 为 true 执行
}
else{
# 布尔表达式的条件都为 false 时执行
}
1.4 unless语句
一个 unless 语句由一个布尔表达式后跟一个或多个语句组成。
unless(boolean_expression){
# 在布尔表达式 boolean_expression 为 false 执行
}
1.5 unless-else语句
一个 unless 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为 true 时执行。
unless(boolean_expression){
# 在布尔表达式 boolean_expression 为 false 执行
}else{
# 在布尔表达式 boolean_expression 为 true 执行
}
1.6 unless-elsif 语句
一个 unless 语句后可跟一个可选的 elsif 语句,然后再跟另一个 else 语句。
这种条件判断语句在多个条件的情况下非常有用。
在使用 unless , elsif , else 语句时你需要注意以下几点。
-
unless 语句后可以跟上 0 个 或 1 个 else 语句,但是 elsif 后面必须有 else 语句。
-
unless 语句后可以跟上 0 个 或 1 个 elsif 语句,但它们必须写在 else 语句前。
-
如果其中的一个 elsif 执行成功,其他的 elsif 和 else 将不再被执行。
unless(boolean_expression 1){
# 在布尔表达式 boolean_expression 1 为 false 执行
}
elsif( boolean_expression 2){
# 在布尔表达式 boolean_expression 2 为 true 执行
}
elsif( boolean_expression 3){
# 在布尔表达式 boolean_expression 3 为 true 执行
}
else{
# 没有条件匹配时执行
}
1.7 switch 语句
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查
注意:switch case 执行是基于 Switch 模块, Switch 模块默认是没有安装的。
1.7.1 使用 CPAN 安装
windows 下:
打开命令窗口,输入 cpan 命令,然后输入 install Switch 命令:
# 打开CPAN Client
cpan[1]> install Switch // 安装
cpan[2]> exit // 退出
Ubuntu 使用 apt-get 安装
sudo apt-get install libswitch-perl
1.7.2 语法格式如下:
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 "不匹配之前的条件" }
}
1.7.3 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 "Shu_zi\n"}
case "a" { print "Zi_Fu_Chuan\n" }
case [1..10,42] { print "List\n" }
case (\@array) { print "Array\n" }
case (\%hash) { print "Hash\n" }
else { print "Wu\n" }
}
输出结果:
原因:switch原则中标红的,匹配成功后直接跳出语句。
1.7.4 next
针对1.7.3 的原因,我们需要在后面加next语句,具体用法如下:
#!/usr/bin/perl
use Switch;
$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);
switch($var){
case 10 { print "Shu_zi\n";next; }
case "a" { print "Zi_Fu_Chuan\n" }
case [1..10,42] { print "List\n" }
case (\@array) { print "Array\n" }
case (\%hash) { print "Hash\n" }
else { print "Wu\n" }
}
输出结果:
2. 三元运算符 ? :
我们可以使用 条件运算 ? : 来简化 if...else 语句的操作。通常格式为:
语句1 ? 语句2 : 语句3;
如果 语句1 表达式为 true ,则返回语句2 表达式计算结果,否则返回语句3。