Perl自学(07)

您所在的位置:网站首页 退出while循环的语句 Perl自学(07)

Perl自学(07)

2024-07-14 05:38| 来源: 网络整理| 查看: 265

(本文参考博客)

1. 循环语句

注意,数字 0, 字符串 '0' 、 "" , 空 list () , 和 undef 为 false ,其他值均为 true。 true 前面使用 ! 或 not则返回 false 。

1.1 while 循环

while 语句在给定条件为 true 时,重复执行语句或语句组。循环主体执行之前会先测试条件。

while(condition) { #condition为真执行该语句块 statement(s); } 1.2 until 语句

until 语句在给定条件为 false 时,重复执行语句或语句组。

until(condition) { #condition为false时候。执行该语句模块 statement(s); } 1.3 for 循环

Perl for 循环用于多次执行一个语句序列,简化管理循环变量的代码。

for ( init; condition; increment ){ #init:初始化变量 #condition:循环条件 #increment:循环变量更新 #条件是true执行循环体 statement(s); }

下面是 for 循环的控制流程解析:

init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。接下来,会判断 condition。如果为 true,则执行循环主体。如果为 false,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。条件再次被判断。如果为 true,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为 false 时,for 循环终止。

在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

condition 可以是任意的表达式,当条件为 true 时执行循环,当条件为 false 时,退出循环。

1.4 foreach 循环

Perl foreach 循环用于迭代一个列表或集合变量的值。

foreach var (list) { ... } #!/usr/bin/perl @list = (2, 12, 36, 42, 51); # 执行foreach 循环 foreach $a (@list){ print "a 的值为: $a\n"; } a 的值为: 2 a 的值为: 12 a 的值为: 36 a 的值为: 42 a 的值为: 51 1.5 do...while 循环

不像 for 和 while 循环,它们是在循环头部测试循环条件。在 Perl 语言中,do...while 循环是在循环的尾部检查它的条件。

do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

do { statement(s); }while( condition );

请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。

如果条件为 true,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为 false 为止。

1.6 循环的嵌套

具体问题具体分析。应该是都会,注意循环的次序。

1.7 无限循环

如果条件永远不为 false,则循环将变成无限循环。

for 循环在传统意义上可用于实现无限循环。

由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。

#!/usr/bin/perl for( ; ; ) { printf "循环会无限执行。\n"; }

注意:你可以按下 Ctrl + C 键来终止循环。

一般情况下,Perl 程序员偏向于使用 for( ; ; ) 结构来表示一个无限循环。

1.8 循环控制语句

next 语句

停止执行从next语句的下一语句开始到循环体结束标识符之间的语句,转去执行continue语句块,然后再返回到循环体的起始处开始执行下一次循环。

last 语句

退出循环语句块,从而结束循环

continue 语句

continue 语句块通常在条件语句再次判断前执行。

redo 语句

redo 语句直接转到循环体的第一行开始重复执行本次循环,redo语句之后的语句不再执行,continue语句块也不再执行;

goto 语句

Perl 有三种 goto 形式:got LABLE,goto EXPR,和 goto &NAME。 1.8.1 next 语句 next [ LABEL ];

 其中 LABEL 是可选的,如果没有指定 LABEL,next 语句将返回到循环体的起始处开始执行下一次循环。

#!/usr/bin/perl $a = 10; while( $a < 20 ){ if( $a == 15) { # 跳出迭代 $a = $a + 1; next; } print "a 的值为: $a\n"; $a = $a + 1; } 执行以上程序,输出结果为: a 的值为: 10 a 的值为: 11 a 的值为: 12 a 的值为: 13 a 的值为: 14 a 的值为: 16 a 的值为: 17 a 的值为: 18 a 的值为: 19 1.8.2 last 语句 last [LABEL];

Perl last 语句用于退出循环语句块,从而结束循环,last语句之后的语句不再执行,continue语句块也不再执行。

#!/usr/bin/perl $a = 10; while( $a < 20 ){ if( $a == 15) { # 退出循环 $a = $a + 1; last; } print "a 的值为: $a\n"; $a = $a + 1; } 执行以上程序,输出结果为: a 的值为: 10 a 的值为: 11 a 的值为: 12 a 的值为: 13 a 的值为: 14 1.8.3 continue 语句

Perl continue 块通常在条件语句再次判断前执行。

continue 语句可用在 while 和 foreach 循环中。

while(condition){ statement(s); }continue{ statement(s); } #/usr/bin/perl $a = 0; while($a < 3){ print "a = $a\n"; }continue{ $a = $a + 1; } 执行以上程序,输出结果为: a = 0 a = 1 a = 2 1.8.4 redo 语句

Perl redo 语句直接转到循环体的第一行开始重复执行本次循环,redo语句之后的语句不再执行,continue语句块也不再执行。

continue 语句可用在 while 和 foreach 循环中。

redo [LABEL] 其中 LABEL 是可选的。带标号修饰符LABEL的redo语句表示把循环控制流程直接转到与标号修饰符LABEL相关联的语句块的第一行处开始执行,而不再执行redo语句之后的语句和continue语句块;不带标号修饰符LABEL的redo语句表示把循环控制流程直接转到当前语句块的第一行处开始执行,而不再执行redo语句之后的语句和continue语句块;如果是在for循环中或者是带有continue语句块,则for循环中的递增列表和continue语句块都不再被执行; #/usr/bin/perl $a = 0; while($a < 10){ if( $a == 5 ){ $a = $a + 1; redo; } print "a = $a\n"; }continue{ $a = $a + 1; } 执行以上程序,输出结果为: a = 0 a = 1 a = 2 a = 3 a = 4 a = 6 a = 7 a = 8 a = 9 1.8.5 goto 语句

Perl 有三种 goto 形式:got LABLE,goto EXPR,和 goto &NAME:

1goto LABEL

找出标记为 LABEL 的语句并且从那里重新执行。

2goto EXPR

goto EXPR 形式只是 goto LABEL 的一般形式。它期待表达式生成一个标记名称,并跳到该标记处执行。

3goto &NAME

它把正 在运行着的子进程替换为一个已命名子进程的调用。

1.8.5.1 goto LABLE示例:

 

#/usr/bin/perl $a = 10; LOOP:do { if( $a == 15){ # 跳过迭代 $a = $a + 1; # 使用 goto LABEL 形式 print "跳出输出 \n"; goto LOOP; print "这一句不会被执行 \n"; } print "a = $a\n"; $a = $a + 1; }while( $a < 20 ); 执行以上程序,输出结果为: a = 10 a = 11 a = 12 a = 13 a = 14 跳出输出 a = 16 a = 17 a = 18 a = 19

1.8.5.2  goto EXPR示例

$a = 10; $str1 = "LO"; $str2 = "OP"; LOOP:do { if( $a == 15){ # 跳过迭代 $a = $a + 1; # 使用 goto EXPR 形式 goto $str1.$str2; # 类似 goto LOOP } print "a = $a\n"; $a = $a + 1; }while( $a < 20 ); 执行以上程序,输出结果为: a = 10 a = 11 a = 12 a = 13 a = 14 a = 16 a = 17 a = 18 a = 19

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3