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:输出信息后不退出,只是报警

$! :内部变量包含错误代码

$@ :内部变量包含错误信息