Perl自学(07)——循环语句

本文参考博客

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 循环的控制流程解析:

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为 true,则执行循环主体。如果为 false,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可
  4. 条件再次被判断。如果为 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

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值