
日期:2006-10-18 作者:喜騰小二 來源:PHPChina
瞭解Perl陳述式、變數和運算元的基礎知識,並建立第一個簡單的程式後,您希望進一步深入學習。您能學會的最重要的一項內容是控制Perl程式流程——例如,根據不同的情況分離程式碼,或重複執行程式碼塊,對一個特定的資料組進行全麵探查。
本文將介紹後一種情況,為您幫助允許您重複執行一組Perl陳述式的各種Perl結構。這種重複執行叫做迴圈,這些迴圈在大多數Perl指令檔中發揮着重要作用。下麵我們來進行幫助。
While迴圈
Perl中最基本的迴圈為所謂的while()迴圈,它允許您在一個特定的條件保持為真的情況下,重複執行一組陳述式。這個條件是一個標準的Perl條件運算式,可由解析器計算它的值,再返回真或假值。下麵是一個簡單的例子(清單A):
清單A
#!/usr/bin/perl
# define number array
@nums = (1..18);
# define counter
$count = 0;
# run loop while number is less than 12
while ($nums[$count] < 12) {
print $nums[$count];
$count++;
}
在這個例子中,只要範圍內的數字小於12,就將它列印出來。數值到12時,條件運算式不再得到滿足,所以不再列印數字。
下麵是另一個更加實用的例子(清單B):
清單B
#!/usr/bin/perl
# define variables
$fact = 1;
$num = 5;
# calculate and print the factorial
while($num > 1){
$fact = $fact * $num;
$num--;
}
print $fact;
這個例子用while()迴圈由5倒數至1,每個階段的值與前一個階段得到的值相乘。最後,終值為5的階乘,或120。
Until迴圈
與while()迴圈相反的是until()迴圈,直到某個特定的條件為假前,迴圈一直執行。因此,until()迴圈中的條件運算式與while()迴圈中的運算式正好相反。下麵是一個例子(清單C):
清單C
#!/usr/bin/perl
# define number array
@nums = (1..18);
# define counter
$count = 0;
# run loop while number is less than 12
until ($nums[$count] >= 12) {
print $nums[$count];
$count++;
}
我們還可以用until()迴圈重寫階乘的例子,如清單D所示:
清單D
#!/usr/bin/perl
# define variables
$fact = 1;
$num = 5;
# calculate and print the factorial
until($num < 1){
$fact = $fact * $num;
$num--;
}
print $fact;
For迴圈
它是Perl中最常用的迴圈之一,for()迴圈用來重複執行一個程式碼塊,執行的次數預先指定。這個迴圈透過一個計數器變數執行,變數被初始化為一個特定的值。接下來,對一個條件運算式進行測試,如果結果為真,就執行程式碼塊,變數遞增(或遞減)。不斷執行程式碼,直到運算式結果為假。
清單E是一個簡單的例子:
清單E
#!/usr/bin/perl
# define number array
@nums = (1..18);
# run loop while number is less than 12
for ($x=0; $x<11; $x++) {
print $nums[$x];
}
在這個例子中,迴圈計數器的初始值為0。接下來,對條件運算式進行測試,如果結果為真,就列印相應的數列元素。計數器遞增,為下一個迴圈做準備。這一過程一直持續到第12個數列元素,這時條件運算式的結果為假,迴圈被終止。
也可以用for()迴圈重寫階乘的例子,如清單F所示:
清單F
#!/usr/bin/perl
# define variables
$fact = 1;
$num = 5;
# calculate and print the factorial
for ($x=5; $x>1; $x--) {
$fact = $fact * $x;
}
print $fact;
這個稍有不同,因為每次迴圈計數器變數不是遞增,而是遞減。這樣就可以由5倒數至1,這時條件運算式為假,迴圈終止。$fact的結果值為5的階乘。
Foreach迴圈
Foreach迴圈是一個有些特殊的迴圈——隻有Perl的陣列變數能夠使用這個迴圈。該迴圈可以方便地重複陣列的每一個元素,依次對它們進行處理。清單G是一個例子:
清單G
#!/usr/bin/perl
# define number array
@nums = (1..18);
# iterate through array elements
foreach $n (@nums) {
print "$n ";
}
這裡,foreach()迴圈結構被提交給一個陣列變數,在這個例子中它包含18個元素。迴圈每重複一次,當前選中的元素被分配給暫時變數$n,並以某種方式進行處理(在本例中簡單在終端列印)。迴圈繼續進行,直到所有的陣列元素按順序處理完畢。
在處理陣列時,foreach()迴圈要大大優於for()迴圈和while()迴圈,主要是因為它不需要一個計數器變數手工追蹤它在陣列中的位置;這個工作在內部進行處理,使這一迴圈在處理陣列時簡單而透明。
常用迴圈
這四個迴圈是Perl中最常用的迴圈——很少有指令檔不會用到它們。希望上麵的簡短實例與幫助能夠說明您瞭解它們,並開始在實際實踐中加以應用。編碼快樂!