在編寫程式的過程中,常常要用到嵌套的迴圈結構,有時侯需要使用一種手段來中斷它;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語句則退出與標號修飾符相關聯的迴圈;