迴圈與控制結構

# 迴圈與控制結構

# (1) for
for($i=0;$i<10;++$i){
    print $i;   # 印出 0123456789
}
# 註:{} 不可省略

# (2) while
# (A)
$i=0;
while($i<10){
    print $i;   # 印出 0123456789
    ++$i;
}

# (B)
while( ($key,$value) = each %hash ){
    print "$key is $value\n";
}

# (3) do while
do {
    print $i;
    $i++;
}while($i<10);

# (4) until(與 while 相反)
until($i>=10){
    print $i;
    $i++;
}

# (5) foreach

# (A)
@arr = (1,2,3,4);
foreach $i (@arr){
    print $i;               # 印出 @arr 所有元素
}
# (B)
%hash = ("Bill" => "boy","Mary" => "gril");
foreach $key (keys %hash){
    # 印出 %hash 所有元素
    print "$key is $hash{$key}\n";
}

# (C)
print foreach (1 .. 9); # 倒裝

# (D) foreach 可簡寫成 for
print for 1 .. 9;

# (6) last, next and redo

while($something){

    # redo 跳到這裡重新開始
    # something ...

    if($ok){
        next;   # next 跳過目前此次迭代
    }

    if($oops){
        redo;   # redo 重新執行目前此次迭代
    }
    # something ...

    if($error){
        last;   # last 會終止圈
    }

    # something ...
    # next 跳到這裡
}
# last 跳到這裡繼續執行

# 註:next, last 與 redo 皆可用在 for,foreach,while 與 until 等迴圈。

# (7) if
# (A)
$a = 5;
if($a > 3){
    print "$a > 3\n";
}elsif($a < 3){
    print "$a < 3\n";
}else{
    print "$a = 3\n";
}

# (B)
$val = 3;

# 倒裝,等同於: if ($val>0) { print $val; }
print $val if $val > 0;

# (8) unless (與 if 相反)
$a = 5;
print "$a > 4" unless($a <= 4);

# 練習一
# 
# 1.寫一個 perl script 印出九九乘法表
#

# 基本版
for($i=1;$i<10;++$i){
    for($j=1;$j<10;++$j){
        print $j . "x" . $i . "=", $i*$j, " ";
    }
    print "\n";
}

# 排版整齊
for($i=1;$i<10;++$i){
    for($j=1;$j<10;++$j){
        print $j . "x" . $i . "=", $i*$j, " ";
        if($i*$j < 10){
            print " ";
        }
    }
    print "\n";
}

# 精簡版
for $i (1 .. 9){
    printf "%dx%d=%-3d",$_,$i,$i*$_ for (1 .. 9);
    print "\n";
}

繼續閱讀:Perl 程式設計教學