Perl foreach用法解析
本文和大家重點討論一下Perl foreach命令的用法,Perl foreach循環中控制變量的值會被Perl自動保存和恢復。當循環進行時,是沒有辦法改變其值的。循環結束時,變量的值會回到循環開始前,如果沒有值則為undef。
Perl foreach用法
Perl foreach從列表(數組)的***個元素一直循環執行到***一個元素,一次迭代一個。控制變量(本例中為$rock)每一次迭代從列表中取出一個新值。***次為“bedrock”,第三次為“lava”。控制變量不是這些列表元素中的一個拷貝而是這些元素本身。也就是說,如果在循環中修改這個變量,那原始列表中的元素也會被修改,如下面代碼段所顯示。這條性質是有用的,但是,如果不清楚,可能對其結果感到吃驚。
當循環結束時$rock的值為多少呢?其值同循環開始之前相同。Perl foreach循環中控制變量的值會被Perl自動保存和恢復。當循環進行時,是沒有辦法改變其值的。循環結束時,變量的值會回到循環開始前,如果沒有值則為undef。這意味著如果有一個變量和控制變量有相同的名字:“$rock”,不用擔心會混淆它們。
perl中while和Perl Perl foreach的區別
while(defined($_=<STDIN>))
{
print“Isaw$_”;
}
在列表context中使用行輸入操作時,則會將所有的行(剩下的)當作一個列表,而每一行作為列表的一個元素:
Perl foreach(<STDIN>)
{
print“Isaw$_”;
}
同樣,行輸入操作和Perl的默認變量$_沒有必然的聯系。在上例中,Perl foreach默認的控制變量為$_。因此,此循環將每一行
賦給$_。
上面的看起來相似:好像有理由認為它們的行為也是相似的,不是嗎?
它們在底層是很不相同的。在while循環中,Perl讀入一行,將它賦給變量,然后進入循環。再回到開頭,讀入下一行。但
在Perl foreach循環中,由于行輸入操作在列表的context中使用,因為Perl foreach需要一個列表作為其參數。因此,它在循環執行
前會將所有的輸入讀入。這種區別在讀入一個400MB的web服務器的log文件時非常明顯。通常使用while循環是一種更
好的方法,因為它一次處理一行輸入。
【編輯推薦】