流程控制

2018-02-24 16:03 更新

四個(gè)假值

在 Perl 中有 4 種假值:

my  $false = undef;
    $false = "";
    $false = 0;
    $false = "0";

最后一個(gè)為假值是因?yàn)?"0"?在數(shù)字上下文中將變成 0,根據(jù)第三條規(guī)則, 它是假值。

后綴控制

簡(jiǎn)單的?if?或?unless?塊可能看起來像這樣:

if ($is_frobnitz) {
    print "FROBNITZ DETECTED!\n";
}

在這些情況下,if?或?unless?能夠追加到簡(jiǎn)單語句的尾部。

print "FROBNITZ DETECTED!\n" if $is_frobnitz;
die "BAILING ON FROBNITZ!\n" unless $deal_with_frobnitz;

while?和?for?也可以這樣用。

print $i++ . "\n" while $i < 10;

for?循環(huán)

for?循環(huán)有三種風(fēng)格。

my @array;

# Old style C for loops
for (my $i = 0; $i < 10; $i++) {
    $array[$i] = $i;
}

# Iterating loops
for my $i (@array) {
    print "$i\n";
}

# Postfix for loops
print "$_\n" for @array;

你也許會(huì)看到?foreach?用于?for?的位置。它們兩個(gè)可以互換。在上述后 兩種循環(huán)風(fēng)格中多數(shù)人使用?foreach

do?塊

do?允許 Perl 在期待語句的位置使用塊。

open( my $file, '<', $filename ) or die "Can't open $filename: $!"

但如果你需要做別的事:

open( my $file, '<', $filename ) or do {
    close_open_data_source();
    die "Aborting: Can't open $filename: $!\n";
};

下列代碼也是等價(jià)的:

if ($condition) { action(); }
do { action(); } if $condition;

作為特殊情況,while?至少執(zhí)行塊一次。

do { action(); } while action_needed;

Perl 沒有?switch?或?case

如果你從其他語言而來,你可能用過?case?語句。Perl 沒有它們。

最接近的我們有?elsif

if ($condition_one) { 
    action_one();
}
elsif ($condition_two) {
    action_two();
}
...
else {
    action_n();
}

沒有辦法像?case?那樣清晰。

given ... when

從 Perl 5.10.1 開始,你可以使用下列代碼來打開實(shí)驗(yàn)性的?switch?特性:

use feature "switch";

given ($var) {
    when (/^abc/) { $abc = 1 }
    when (/^def/) { $def = 1 }
    when (/^xyz/) { $xyz = 1 }
    default       { $nothing = 1 }
}   

next/last/continue/redo

考慮以下循環(huán):

$i = 0;
while ( 1 ) {
    last if $i > 3;
    $i++;
    next if $i == 1;
    redo if $i == 2;
}
continue {
    print "$i\n";
}

輸出:

1
3
4

next?跳到塊尾并繼續(xù)或重新開始。

redo?立即跳回到循環(huán)的開頭。

last?跳到塊尾并阻止循環(huán)再次執(zhí)行。

continue?在塊尾執(zhí)行。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)