learning perl(三) 控制結構

perl的控制結構主要有六種,下面我們一一來了解。


0.if () {} else (){} 就不說了啊。


1.while(condition){

do_something;

}

while 循環與C++中的沒有什麼區別,滿足條件就一直執行,否則跳出循環。

不過有時候可以這麼用:

my $flag = true;

while ($flag) {

if (condition){

$flag = false;

}

do_something;

}

看個人喜好吧微笑

2.foreach 與 for 循環在C++中只有for,但在perl中for與foreach等價,foreach能依次遍歷列表的值,比如輸出數組中的所有元素,可以這樣寫:

foreach my $val(@arr) {

print "$val\n";

}

循環會改變列表本身的值,比如@arr,但是不會改變控制變量的值,比如$val。使用for可以像C++中一樣,比如依次輸出十個數:

for ($i = 1; $i <= 10; $i++){

print "$i\t";

}

使用foreach 可以這樣:

foreach (1..10) {

print "$_\t";

}

你會使用哪個呢?其中'1..10'代表從1依次到十,當然,for與foreach其實等價,使用哪個都可以。


大多數時候,使用while 和 foreach 足以完成任務,但是有下面的幾個小夥伴的加入,完成任務會更加的有樂趣。

3.unless 控制結構。unless可以看做if 的反面,比如判斷打開文件是否成功,可以這樣使用if:

if (! open HD,"< file_input") {

die "Can't open.";

}

使用unless ,可以這樣:

unless (open HD, "< file_input") {

die "Can't open";

}

當然,有很多不同的方法都可以達到相同的目的,比如第三種:

open HD, "< file_input" or die $!;

怎麼樣,很簡潔吧!大笑其中的or叫做條件修飾符,還可以使用if while 等,這些控制結構如果放在後面就叫條件修飾符,有時候會非常方便,也很省事,畢竟可以不用寫{ }了。


 4.until 控制結構if 有一個反面的 unless,那麼while理所當然的就有了until控制結構。與while 唯一的差別就是until 在條件爲假時一直執行,否則跳出循環。多數情況下個人比較喜歡用while,就不舉例子了。


5.裸塊控制結構 所謂裸塊控制結構,就是沒有多餘的東西,只有大括號,像這樣的:

{

do_something;

}

在裸塊中的語句只執行一次,其中定義的全都是屬於局部變量,有時候會很有用。


有了這些控制語句,就像一個人有了骨骼的支撐,更加的健壯,那麼如何提早跳出循環或者進入下一次循環呢,接着往下看。

6.循環控制

a) last.它的作用是立刻終止最近的一個循環,也就是跳出這個循環,接着執行後面的語句。與C++中的break相同。

b) next. 立即結束本次循環,跳過之後的語句,開始下一次循環。與C++中的continue相同。

c) redo. 立即結束本次循環,跳過之後的語句,到達循環的最頂端,相當於從頭再次執行這次循環,而不是下一次循環。

d) 標籤。上面所說的都只是對最內層的循環就行處理,如果想跳到外層循環,該怎麼辦?放心,有標籤可以使用:

HAHA: while (condition1) {

while (condition2) {

last HAHA if (condition3);

}

}

標籤的名字可以隨便命名,不過一般採用容易識別的大寫字符比較好。


另外,perl中也有自增(++)自減(--)操作符,也分前後,與C++相同,在前面,先加減,再賦值,後面是先賦值,再加減。也有三目操作符? : 。還有邏輯與&&和邏輯或||,所不同的是,邏輯或操作符||的返回值是最後計算的那部分的值,比如:

my $last_name = $last_name{$some} || 'No last name';

如果$some在%last_name中存在,那麼就返回$some 對應的值,否則返回右面的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章