迴圈控制敘述(Loop Control Statements)
我們知道迴圈可以幫助程式,「反覆進行」同一個區塊內的運算,
但有時候我們會希望,迴圈能「跳過」某次運算,或是「轉向」其他程式區塊。
這個「跳過」或「轉向」的操作,就是這篇迴圈控制要說明的部分了。
靈活的迴圈控制能節省程式執行時間,
但必須謹慎的使用,避免程式結構被破壞而導致維護上的困難。
之前提過的for、foreach、while、until,
我們在控制敘述的重複執行有說明,
在這裡我們就討論,怎麼在這幾個迴圈內做操作吧!
last
顧名思義就是讓迴圈停止。
用法是寫在迴圈內,我們來用例子說明:
for ($i=0;$i<10;$i++)
{ # $i會先從0開始 每跑完一次就會累加1
if($i==8) # 當$i為8時
{
last; # 終止迴圈
}
print $i; # 把$i印出來
}
執行結果就會看到 只印到7就不執行了。
如果要偷懶點的寫法,可以寫成:
for ($i=0;$i<10;$i++)
{ # $i會先從0開始 每跑完一次就會累加1
last if($i==8); # 當$i為8時終止
print $i; # 把$i印出來
}
執行結果會是相同的。
redo
可以讓迴圈重複執行一次,
用法同樣是寫在迴圈內,來看例子:
$count=0; # 迴圈外放一個計數器
for ($i=0;$i<10;$i++)
{ # $i會先從0開始 每跑完一次就會累加1
$count++;
redo if($count==8); # 當$count為8時重作"一次"迴圈
print $count; # 把$count印出來
}
執行結果就會看到,8多加了一次,結果就是8沒有印出來。
next
既然可以讓迴圈停止、重作,
當然,一樣就有「略過」的控制敘述,
用法同樣是寫在迴圈內,來看例子:
for ($i=0;$i<10;$i++)
{ # $i會先從0開始 每跑完一次就會累加1
next if($i==8); # 當$i為8時略過
print $i; # 把$i印出來
}
執行結果就會看到,8沒有被印出來。
知道了迴圈的「終止」、「重作」、「略過」之後,
最後一個我們要看的,是用來做「轉向」的標籤(Label)
標籤的作用是讓Perl知道接下來要跳到哪裡去,
很多程式設計師很反對使用標籤,因為會對程式架構上,有一定程度的破壞。
不過阿逸自己則是認為,適時的使用反而會增加方便性。
有時候單單利用next或last無法逃離迴圈到正確的地方時,
就會使用到標籤(Label)。標籤使用方式為:
1.定義標籤所在位置及名稱,要大寫,並且要有冒號(:)。
2.使用時,加上goto 以及標籤名稱。
直接來看怎麼用吧:
@array= qw/123 456 789 246 468 135 357/; # 依序放入陣列
$pattern= 456; # 用來比對的樣式
foreach (@array)
{
print $_; # 印出每次讀取的陣列內容
if ($pattern== $_) # 比對成功時
{
goto LABEL; # 轉向到標籤點
}
}
LABEL: # 記住 這裡是使用冒號(:) 表示標籤的定位點
執行結果就會看到,符合條件後,程式就跳到迴圈外的標籤。
接下來就要加入一些檔案處理的觀念了,
要進行的部分是Perl的檔案存取。