Perl 循环

Perl 语言提供了以下几种循环类型:

循环类型描述

while 循环

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

until 循环

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

for 循环

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

foreach 循环

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

do...while 循环

除了它是在循环主体结尾测试条件外,其他与 while 语句类似。

嵌套循环

您可以在 while、for 或 do..while 循环内使用一个或多个循环。

while 循环 

语法格式如下所示:

while(condition)
{
   statement(s);
}
#!/usr/bin/perl
 
$a = 10;
 
# 执行 while 循环
while( $a < 20 ){
   printf "a 的值为 : $a\n";
   $a = $a + 1;
}

执行以上程序,输出结果为:

a 的值为 : 10
a 的值为 : 11
a 的值为 : 12
a 的值为 : 13
a 的值为 : 14
a 的值为 : 15
a 的值为 : 16
a 的值为 : 17
a 的值为 : 18
a 的值为 : 19

 until 循环

语法格式如下所示:

until(condition)
{
   statement(s);
}

condition 可以是任意的表达式,当条件为 false 时执行循环。 当条件为 true 时,程序流将继续执行紧接着循环的下一条语句。 

#!/usr/bin/perl
 
$a = 5;
 
# 执行 until 循环
until( $a > 10 ){
   printf "a 的值为 : $a\n";
   $a = $a + 1;
}

程序中在变量 $a 小于 10 时执行循环体,在变量 $a 大于 10 时,退出循环。

执行以上程序,输出结果为:

a 的值为 : 5
a 的值为 : 6
a 的值为 : 7
a 的值为 : 8
a 的值为 : 9
a 的值为 : 10

 for 循环

语法格式如下所示:

for ( init; condition; increment ){
   statement(s);
}

执行以上程序,输出结果为:

 

 foreach 循环

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

语法格式如下所示:

foreach var (list) {
...
}

执行以上程序,输出结果为:

 do...while 循环

语法格式如下所示:

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

 

循环嵌套

执行以上程序,输出结果为:


 循环控制语句

 循环控制语句改变了代码的执行顺序,通过它你可以实现代码的跳转

Perl 提供了下列的循环控制语句:

控制语句描述

next 语句

类似于其他语言的 continue,表示结束本次循环,转而进入下一次循环

last 语句

退出当前层次循环语句块,从而结束当前层次循环,但是不会跳出外层循环,类似于 break

continue 语句

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

redo 语句

redo 语句直接转到循环体的第一行开始重复执行本次循环,所以本次迭代中曾执行过的语句可能会再次执行,redo语句之后的语句不再执行,continue语句块也不再执行;

goto 语句

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

next 语句 

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

语法格式如下所示:

next [ LABEL ];

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

执行以上程序,输出结果为:

 last 语句

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

 

语法格式如下所示:

last [LABEL];

 

执行以上程序,输出结果为:

 continue 语句

 continue 块通常在条件语句再次判断前执行。continue 语句可用在 while 和 foreach 循环中。

while 循环中使用 continue 语句:

执行以上程序,输出结果为:

foreach 循环中使用 continue 语句:

执行以上程序,输出结果为:

 

redo 语句 

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

 goto 语句

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

序号goto 类型
1goto LABEL

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

2goto EXPR

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

3goto &NAME

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

语法格式如下所示:

goto LABEL

或

goto EXPR

或

goto &NAME

实例

以下两个实例在变量 $a 为 15 时跳出输出。

以下是一个常用的 goto 实例:

执行以上程序,输出结果为:

以下实例使用了 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

无限循环

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值