Perl foreach用法解析
本文和大家重點(diǎn)討論一下Perl foreach命令的用法,Perl foreach循環(huán)中控制變量的值會(huì)被Perl自動(dòng)保存和恢復(fù)。當(dāng)循環(huán)進(jìn)行時(shí),是沒(méi)有辦法改變其值的。循環(huán)結(jié)束時(shí),變量的值會(huì)回到循環(huán)開(kāi)始前,如果沒(méi)有值則為undef。
Perl foreach用法
Perl foreach從列表(數(shù)組)的***個(gè)元素一直循環(huán)執(zhí)行到***一個(gè)元素,一次迭代一個(gè)??刂谱兞浚ū纠袨?rock)每一次迭代從列表中取出一個(gè)新值。***次為“bedrock”,第三次為“lava”??刂谱兞坎皇沁@些列表元素中的一個(gè)拷貝而是這些元素本身。也就是說(shuō),如果在循環(huán)中修改這個(gè)變量,那原始列表中的元素也會(huì)被修改,如下面代碼段所顯示。這條性質(zhì)是有用的,但是,如果不清楚,可能對(duì)其結(jié)果感到吃驚。
當(dāng)循環(huán)結(jié)束時(shí)$rock的值為多少呢?其值同循環(huán)開(kāi)始之前相同。Perl foreach循環(huán)中控制變量的值會(huì)被Perl自動(dòng)保存和恢復(fù)。當(dāng)循環(huán)進(jìn)行時(shí),是沒(méi)有辦法改變其值的。循環(huán)結(jié)束時(shí),變量的值會(huì)回到循環(huán)開(kāi)始前,如果沒(méi)有值則為undef。這意味著如果有一個(gè)變量和控制變量有相同的名字:“$rock”,不用擔(dān)心會(huì)混淆它們。
perl中while和Perl Perl foreach的區(qū)別
while(defined($_=<STDIN>))
{
print“Isaw$_”;
}
在列表context中使用行輸入操作時(shí),則會(huì)將所有的行(剩下的)當(dāng)作一個(gè)列表,而每一行作為列表的一個(gè)元素:
Perl foreach(<STDIN>)
{
print“Isaw$_”;
}
同樣,行輸入操作和Perl的默認(rèn)變量$_沒(méi)有必然的聯(lián)系。在上例中,Perl foreach默認(rèn)的控制變量為$_。因此,此循環(huán)將每一行
賦給$_。
上面的看起來(lái)相似:好像有理由認(rèn)為它們的行為也是相似的,不是嗎?
它們?cè)诘讓邮呛懿幌嗤摹T趙hile循環(huán)中,Perl讀入一行,將它賦給變量,然后進(jìn)入循環(huán)。再回到開(kāi)頭,讀入下一行。但
在Perl foreach循環(huán)中,由于行輸入操作在列表的context中使用,因?yàn)镻erl foreach需要一個(gè)列表作為其參數(shù)。因此,它在循環(huán)執(zhí)行
前會(huì)將所有的輸入讀入。這種區(qū)別在讀入一個(gè)400MB的web服務(wù)器的log文件時(shí)非常明顯。通常使用while循環(huán)是一種更
好的方法,因?yàn)樗淮翁幚硪恍休斎搿?/p>
【編輯推薦】
- 使用 Perl 增強(qiáng) Twitter 實(shí)用性
- 深入解析Perl內(nèi)部函數(shù)的使用
- Perl語(yǔ)言中的五大變量類型
- 淺析Perl正則表達(dá)式在PHP的實(shí)現(xiàn)
- Python編程語(yǔ)言比perl在實(shí)際應(yīng)用中優(yōu)點(diǎn)所在