if
格式(類似於awk):
if(表達式){ #空格可以忽略 語句 ;} #elsif注意多了個s,elsif和else可以省略 elsif(表達式){ #語句塊的{}必須有,可以爲空 語句:} else{ 語句;}
unless
格式:
unless (表達式){ 語句;}
while
格式:
while(表達式){ 語句;}
do while
格式:
do {語句} while(表達式)
until
格式:
until(表達式){ 語句;}
do until
格式:
do {語句} until(表達式)
for foreach
for和foreach等價可以互換
格式:
c語言風格
for(表達式1;表達式2;表達式3){ 語句;}
表達式可以省略分號必須保留:(;;)爲死循環
for($l=<>,$count=1;$count<10;$count++,$l=<>){ print "$l";}
foreach
foreach $w (列表or數組){ 語句;}
()中爲@array或者列表(1,2,3)
$w爲循環體的局部變量,並不會影響外部同名變量
循環體每次取數組或列表的元素直到爲空
修改$w會修改對應元素的值;$w是列表數組元素的一個引用,與列表或數組變量引用具有相同內存地址,所以修改$w會修改其對應元素的值
列表中爲常量,$w不可改變,$w只是對數組列表元素的一個引用,$w賦值時,$w指向新的內存對象,原列表中的值並不改變
for $a(@a){} for $a(1,2,3){} for $k(keys%h){} for $a(@a[1,2]){} for (@a){} #省略循環變量,缺省爲$_
grep,map函數相當於for每個元素進行操作
循環控制
last 退出循環
next 執行下一次循環
redo 重新執行本次循環,for自增不進行,do語句中無效
goto 跳轉,不能跳到循環或者子程序內
標記:
字母加下劃線,通常用大寫,以:分隔
標記定義:在循環語句前或者語句前(goto)
while for
跳轉到標記: last|next|redo|goto label
OUT: while (...){ while(...){... last OUT; #跳轉到OUT標識的語句塊,這裏是跳出這一層循環到外層循環 } }
continue{語句}
跟在循環語句後,循環體執行完成,下一次條件判斷前執行
{}標識語句塊
last跳出後不執行,next執行;
單行條件語句與循環語句
print $a if $a==0;#先判斷條件在執行打印 print $a unless($a==0); print $a while ($a==0); #不要丟失對變量控制,防止形成死循環 print $a while ($a--==0); print $a until ($a--==0);
|| && (用法同shell)
$a==0 && print $a; open(FD6,'file')||die "can't open file";#die函數,輸出標準錯誤輸出後推出
warn:輸出信息後不退出,只是報警
$! :內部變量包含錯誤代碼
$@ :內部變量包含錯誤信息