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 對應的值,否則返回右面的值。