Perl条件语句-Perl语言教程|
Perl 条件语句
Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。
可以通过下图来简单了解条件语句的执行过程:
注意,数字 0, 字符串 '0' 、 "" , 空 list () , 和 undef 为 false ,其他值均为 true。 true 前面使用 ! 或 not则返回 false 。
Perl 提供了下拉的条件语句:
语句 | 描述 |
---|---|
if 语句 |
一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 |
if...else 语句 |
一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
if...elsif...else 语句 |
您可以在一个 if 语句后可跟一个可选的 elsif 语句,然后再跟另一个 else 语句。 |
unless 语句 |
一个 unless 语句 由一个布尔表达式后跟一个或多个语句组成。 |
unless...else 语句。 |
一个 unless 语句 后可跟一个可选的 else 语句。 |
unless...elsif..else statement |
一个 unless 语句 后可跟一个可选的 elsif 语句,然后再跟另一个 else 语句。 |
switch 语句 |
在最新版本的 Perl 中,我们可以使用 switch 语句。它根据不同的值执行对应的代码块。 |
Perl IF 语句
Perl if 语句由一个布尔表达式后跟一个或多个语句组成。
语法
语法格式如下所示:
if(boolean_expression){ # 在布尔表达式 boolean_expression 为 true 执行 }
如果布尔表达式 boolean_expression为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。
流程图
实例
#!/usr/bin/perl $a = 10; # 使用 if 语句判断布尔表达式 if( $a < 20 ){ # 布尔表达式为true时执行 printf "a 小于 20 "; } print "a 的值为 : $a "; $a = ""; # 使用 if 语句判断布尔表达式 if( $a ){ # i布尔表达式为true时执行 printf "变量 a 为 true "; } print "a 的值为 : $a ";
执行以上程序,输出结果为:
a 小于 20 a 的值为 : 10 a 的值为 :
Perl IF...ELSE 语句
一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为 false 时执行。
语法
语法格式如下所示:
if(boolean_expression){ # 在布尔表达式 boolean_expression 为 true 执行 }else{ # 在布尔表达式 boolean_expression 为 false 执行 }
如果布尔表达式 boolean_expression 为 true,则执行 if 块内的代码。如果布尔表达式为 false,则执行 else 块内的代码。
流程图
实例
#!/usr/bin/perl $a = 100; # 使用 if 语句判断布尔表达式 if( $a < 20 ){ # 布尔表达式为true时执行 printf "a 小于 20 "; }else{ # 布尔表达式为false时执行 printf "a 大于 20 "; } print "a 的值为 : $a "; $a = ""; # 使用 if 语句判断布尔表达式 if( $a ){ # 布尔表达式为true时执行 printf "a 条件为 true "; }else{ # 布尔表达式为false时执行 printf "a 条件为 false "; } print "a 的值为 : $a ";
执行以上程序,输出结果为:
a 大于 20 a 的值为 : 100 a 条件为 false a 的值为 :
Perl IF...ELSIF 语句
一个 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 时执行 }
实例
#!/usr/bin/perl $a = 100; # 使用 == 判断两个数是否相等 if( $a == 20 ){ # 条件为 true 时执行 printf "a 的值为 20 "; }elsif( $a == 30 ){ # 条件为 true 时执行 printf "a 的值为 30 "; }else{ # 以上所有的条件为 false 时执行 printf "a 的值为 $a "; }
执行以上程序,输出结果为:
a 的值为 100
Perl UNLESS 语句
一个 unless 语句由一个布尔表达式后跟一个或多个语句组成。
语法
语法格式如下所示:
unless(boolean_expression){ # 在布尔表达式 boolean_expression 为 false 执行 }
如果布尔表达式 boolean_expression为 false,则 if 语句内的代码块将被执行。如果布尔表达式为 true,则 if 语句结束后的第一组代码(闭括号后)将被执行。
流程图
实例
#!/usr/bin/perl $a = 20; # 使用 unless 语句检测布尔表达式 unless( $a < 20 ){ # 布尔表达式为 false 时执行 printf "a 大于等于 20 "; } print "a 的值为 : $a "; $a = ""; # 使用 unless 语句检测布尔表达式 unless ( $a ){ # 布尔表达式为 false 时执行 printf "条件 a 为 false "; } print "a 的值为 : $a ";
执行以上程序,输出结果为:
a 大于等于 20 a 的值为 : 20 条件 a 为 false a 的值为 :
Perl UNLESS...ELSE 语句
一个 unless 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为 true 时执行。
语法
语法格式如下所示:
unless(boolean_expression){ # 在布尔表达式 boolean_expression 为 false 执行 }else{ # 在布尔表达式 boolean_expression 为 true 执行 }
如果布尔表达式 boolean_expression 为 false,则执行 unless 块内的代码。如果布尔表达式为 true,则执行 else 块内的代码。
流程图
实例
#!/usr/bin/perl $a = 100; # 使用 unless 语句检测布尔表达式 unless( $a == 20 ){ # 布尔表达式为 false 时执行 printf "给定的条件为 false "; }else{ # 布尔表达式为 true 时执行 printf "给定的条件为 true "; } print "a 的值为 : $a "; $a = ""; # 使用 unless 语句检测布尔表达式 unless( $a ){ # 布尔表达式为 false 时执行 printf "a 给定的条件为 false "; }else{ # 布尔表达式为 true 时执行 printf "a 给定的条件为 true "; } print "a 的值为 : $a ";
执行以上程序,输出结果为:
给定的条件为 false a 的值为 : 100 a 给定的条件为 false a 的值为 :
Perl 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{ # 没有条件匹配时执行 }
实例
#!/usr/bin/perl $a = 20; # 使用 unless 语句检测布尔表达式 unless( $a == 30 ){ # 布尔表达式为 false 时执行 printf "a 的值不为 30 "; }elsif( $a == 30 ){ # 布尔表达式为 true 时执行 printf "a 的值为 30 "; }else{ # 没有条件匹配时执行 printf "a 的 值为 $a "; }
执行以上程序,输出结果为:
a 的值不为 30
Perl switch 语句
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
switch case 执行是基于 Switch 模块, Switch 模块使用Filter::Util::Call 和 Text::Balanced 来执行,这两个模块都需要安装。
语法
语法格式如下所示:
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 "数字 10 " } 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 "数字 10 "; next; } # 匹配后继续执行 case "a" { print "string a" } case [1..10,42] { print "数字在列表中" } case (@array) { print "数字在数组中" } case (%hash) { print "在哈希中" } else { print "没有匹配的条件" } }
执行以上程序,输出结果为:
数字 10 数字在列表中
三元运算符 ? :
我们可以使用 条件运算 ? : 来简化 if...else 语句的操作。通常格式为:
Exp1 ? Exp2 : Exp3;
如果 Exp1 表达式为 true ,则返回 Exp2 表达式计算结果,否则返回 Exp3。
实例如下所示:
#!/usr/local/bin/perl $name = ""; $favorite = 10; # 喜欢数 $status = ($favorite > 60 )? "热门网站" : "不是热门网站"; print "$name - $status ";
执行以上程序,输出结果为:
-不是热门网站!
相关文章: