Perl条件语句
Perl条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块
注意:数字0, 字符串'0', " ", 空list(),和undef 为false, 其他值为true. true前面使用 ! 或者 not则返回false.
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语句的规则:
1. switch语句的括号中可以使用任意类型的标量参数
2. 在一个switch中可以有任意数量的case语句。每个case后跟一个要比较的值和一个冒号
3. case语句后的标量会与switch语句的标量进行比较,判断是否相等
4. 当被测试的变量等于case中的常量时,case后跟的语句将被执行,直到遇见 break为止
5. switch语句可以有一个 可选的else, 该语句在最后面,该语句在所有case不匹配的情况下执行
6. 当匹配case后,会执行case语句代码,执行后跳出switch语句
7. 当匹配case后,如果需要继续执行接下来的case语句,则需要添加next语句
三元运算符 ? :
我们可以使用条件运算 ? :来简化if...else语句的操作。通常格式为:
Exp1 ? Exp2 : Exp3;
Perl循环语句
Perl 语言提供了以下几种循环类型:
1. while循环
while 语句在给定条件为 true 时,重复执行语句或语句组。循环主体执行之前会先测试条件。
2. until循环
until 语句在给定条件为 false 时,重复执行语句或语句组。
until 循环的关键点是循环可能一次都不会执行。当条件为 true 时,会跳过循环主体,直接执行紧接着循环的下一条语句。
3. for循环
语法格式如下所示:
for ( init; condition; increment ){
statement(s);
}
init和increment可省略
4. foreach循环
foreach 循环用于迭代一个列表或集合变量的值
5. do...while循环
do...while循环是在循环的尾部检查它的条件。
do...while循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。
语法格式如下所示:
do
{
statement(s);
}while( condition );
注意:条件表达式出现在循环的尾部,所以循环中的statement会在条件在被测试之前至少执行一次。如果条件为true,控制流会跳回上面的do, 然后重新执行循环中的statement. 这个过程会不断重复,直到条件变为false为止。
6. 嵌套循环
Perl 语言允许在一个循环内使用另一个循环
循环控制语句
循环控制语句改变了代码的执行顺序,通过它可以实现代码的跳转
Perl 提供了下列的循环控制语句:
1. Perl next语句
Perl next循环语句用于停止执行从next语句的下一句开始到循环体结束标识符之间的语句,转去执行continue语句块,然后再返回到循环体的起始处开始执行下一次循环。
语法
语法格式如下所示:
其中 LABEL 是可选的,如果没有指定 LABEL,next 语句将返回到循环体的起始处开始执行下一次循环。
2. Perl last语句
Perl last语句用于退出循环语句块,从而结束循环,last语句之后的语句不再执行,continue中的语句也不再执行
语法
语法格式如下所示:
3. Perl continue语句
Perl continue块通常在条件语句再次判断前执行。
continue语句可用在while和foreach循环中。
语法:
while 循环中 continue 语句语法格式如下所示:
foreach 循环中 continue 语句语法格式如下所示:
4. Perl redo语句
Perl redo语句直接转到循环体的第一行开始重复执行本次循环,redo语句之后的语句不再执行,continue的语句块也不再执行。
语法格式如下 :
redo [LABEL]
其中Label时可选的。
带标号修饰符Label的redo语句表示把循环控制流程直接转到与标号修饰符Label相关联的语句块的第一行处开始执行,而不再执行redo语句之后的语句和continue语句块;
不带标号修饰符Label的redo语句表示把循环控制流程直接转到当前语句块的第一行处开始执行,而不再执行redo语句之后的语句和continue语句块;
如果是在for循环中或者带有continue语句块,则for循环中的递增列表和continue语句块都不再执行。
实例:
5. Perl goto语句
Perl有三种goto形式:goto Label, goto Expr, 和goto &Name
1. goto Label: 找出标记为Label 的语句并且从那里重新执行
2. goto Expr: goto Expr形式只是goto Label的一般形式。它期待表达式生成一个标记名称,并跳到该标记出执行
3. goto &Name: 它把正在运行着的子进程替换成一个已命名子进程的调用
语法格式如下所示:
goto LABEL
或
goto EXPR
或
goto &NAME
实例1:goto Label
实例2:goto EXPR
7. 无限循环
如果条件永远不为false, 则循环将变成无限循环。
for循环在传统意义上可用于实现无限循环。
由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。
for( ; ; )
{
printf "循环会无限执行。\n";
}
可以按下 Ctrl + C 键来终止循环。
当条件表达式不存在时,它被假设为 true。您也可以设置一个初始值和增量表达式,但是一般情况下,Perl 程序员偏向于使用 for(;;) 结构来表示一个无限循环。