在编写程序的过程中,常常要用到嵌套的循环结构,有时侯需要使用一种手段来中断它;Perl提供了以下四个循环修饰符:continue、next、last、redo;
1、continue语句块:
for循环的递增列表是在循环体之后执行的,continue语句块在功能上等价于循环的递增列表;在while循环、until循环和foreach循环中可以加入continue语句块:
◆ while循环
while(条件表达式)
{
#while循环体
}
continue
{
#continue程序块;可以执行while循环的递增列表,操作while循环的循环控制变量;
}
◆ until循环
until(条件表达式)
{
#until循环体
}
continue
{
#continue程序代码块;
}
◆ foreach循环
foreach SCALAR (LIST)
{
#foreach循环体
}
由于continue语句块式另外一种实现递增列表的方式,所以,for循环中不能有continue语句块;下面的写法式错误的,而且有语法错误:
for(表达式1;表达式2;表达式3)
{
#for循环体
}
continue
{
#continue语句块
}
在同一个时刻使用continue语句块和next、last以及redo修饰符时,遵循以下规则:
★ next 循环修饰符停止执行从next语句的下一语句开始到循环体结束标识符之间的语句,转去执行continue语句块,然后再返回到循环体的起始处开始执行下一次循环;
★ last 循环修饰符彻底退出其所在的循环语句块,从而结束循环,last语句之后的语句不再执行,continue语句块也不再执行;
★ redo 循环修饰符直接转到循环体的第一行开始重复执行本次循环,redo语句之后的语句不再执行,continue语句块也不再执行;
2、 last 语句:
last 语句可以带标号修饰符,也可以不带标号修饰符;如:last ;或 last LABEL;
带标号修饰符LABEL的 last 语句表示退出与标号修饰符LABEL相关联的语句块;不带标号修饰符的last语句表示退出last语句所在的当前语句块;如果是在for循环中或者是带有continue语句块,则for循环中的递增列表或continue语句块都不再被执行;
3、redo 语句:
redo 语句可以带标号修饰符,也可以不带标号修饰符;如: redo ;或 redo LABEL;
带标号修饰符LABEL的redo语句表示把循环控制流程直接转到与标号修饰符LABEL相关联的语句块的第一行处开始执行,而不再执行redo语句之后的语句和continue语句块;不带标号修饰符LABEL的redo语句表示把循环控制流程直接转到当前语句块的第一行处开始执行,而不再执行redo语句之后的语句和continue语句块;如果是在for循环中或者是带有continue语句块,则for循环中的递增列表和continue语句块都不再被执行;
4、next 语句:
last和redo循环修饰符可以用于空语句块,而next语句只能用于循环体;next语句表示停止执行next语句之后的语句,转去执行continue语句块,最后再转到循环体的第一行处开始执行;next可以带标号修饰符,也可以不带标号修饰符;如:next ;或 next LABEL;
不带标号修饰符的next语句将循环控制流程转到当前循环的第一行处开始执行;带标号修饰符的next语句则退出与标号修饰符相关联的循环;