如何利用程式迴圈來控制Perl指令檔流程

日期: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中最常用的迴圈——很少有指令檔不會用到它們。希望上麵的簡短實例與幫助能夠說明您瞭解它們,並開始在實際實踐中加以應用。編碼快樂!

<<<返回技術中心

技術文章

站內新聞

我要啦免费统计