如何利用程序循環控制Perl腳本流程
瞭解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中最常用的循環——很少有腳本不會用到它們。希望上面的簡短實例與說明能夠幫助您瞭解它們,並開始在實際實踐中加以應用。編碼快樂!