在 Perl 中有 4 种假值:

    最后一个为假值是因为 在数字上下文中将变成 0,根据第三条规则,它是假值。

    后缀控制

    简单的 ifunless 块可能看起来像这样:

    1. if ($is_frobnitz) {
    2. print "FROBNITZ DETECTED!\n";
    3. }

    在这些情况下,ifunless 能够追加到简单语句的尾部。

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

    whilefor 也可以这样用。

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

    for 循环有三种风格。

    do 块

    do 允许 Perl 在期待语句的位置使用块。

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

    但如果你需要做别的事:

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

    下列代码也是等价的:

    1. if ($condition) { action(); }
    2. do { action(); } if $condition;

    作为特殊情况,while 至少执行块一次。

    如果你从其他语言而来,你可能用过 case 语句。Perl 没有它们。

    最接近的我们有 elsif

    1. if ($condition_one) {
    2. action_one();
    3. }
    4. elsif ($condition_two) {
    5. action_two();
    6. }
    7. ...
    8. else {
    9. action_n();
    10. }

    given … when

    从 Perl 5.10.1 开始,你可以使用下列代码来打开实验性的 switch 特性:

    1. given ($var) {
    2. when (/^abc/) { $abc = 1 }
    3. when (/^def/) { $def = 1 }
    4. when (/^xyz/) { $xyz = 1 }
    5. default { $nothing = 1 }
    6. }

    考虑以下循环:

    1. $i = 0;
    2. while ( 1 ) {
    3. last if $i > 3;
    4. $i++;
    5. next if $i == 1;
    6. redo if $i == 2;
    7. }
    8. continue {
    9. print "$i\n";

    输出:

    next 跳到块尾并继续或重新开始。

    redo 立即跳回到循环的开头。

    跳到块尾并阻止循环再次执行。