跳转到内容

Perl 编程/控制流

来自维基教科书,开放的书籍,开放的世界
上一个:条件语句 索引 下一个:声明

控制结构

[编辑 | 编辑源代码]

基本的控制结构与 C 编程语言或 Java 编程语言中使用的控制结构没有太大区别。

while ($boolean) {
    # do something
}

until ($boolean) {
    # do something
}

尽管语法相同,但 Perl 不使用breakcontinue来改变循环的流程。Perl 提供以下命令:(带注释的 C 等价物)

while ($boolean) {
    # do something
    if($finished) {
        last;  # equivalent to 'break'
    }
    if($done) {
        next;  # equivalent to 'continue'
    }
    # do some more
}

注意,在while(或until)循环中,如果布尔表达式在第一次循环时计算为 false(或 true),则不会执行循环中的语句,即使语句在代码块的末尾指定。因此,以下循环在功能上是等价的:(这同样适用于do {} until)

while ($boolean) {
    # something
}

do {
    # something
} while ($boolean);

Thedo {} whileand thedo {} untilloops are technically statement modifiers and not actual control structures. The statements will be executed at least once.

for (my $i = 0; $i < 10; $i++) { # for (initialization; termination condition; incrementing expr) { … }
    print "$i\n";
}

foreach my $variable (@list) {
    print "$variable\n";
}

$variable@list中每个元素的别名,从第一次循环的第一个元素开始。当列表中的所有元素都被遍历完后,循环退出。由于$variable是别名,更改其值将更改列表中元素的值。为了提高代码的可维护性,一般应避免这种情况。

如果$variable被省略,则使用默认变量$_

foreach (@list) {
    print "value: $_ \n";
}

注意forforeach实际上是同义词,可以互换使用。

代码块可以有一个可选的continue部分,该部分在每次迭代结束时执行。

while ($i<4) {
  $i++;
} continue {
  print "$i\n";
}

next, redo, last

[编辑 | 编辑源代码]

在循环内部,有三个关键字控制循环的处理方式。

要开始下一次迭代,next跳到代码块的末尾。如果有continue代码块,则会执行该部分,并执行条件语句以继续循环。

要重新开始一次迭代,redo跳到代码块的开头。既不会执行continue,也不会执行条件语句。

要退出循环,last跳出代码块的末尾。既不会执行continue,也不会执行条件语句。

在 5.10.1 版本之前,Perl 没有等效于其他编程语言中的 switch 语句。从该版本开始,它成为一项实验性功能。

在 Perl 5 中,需要使用以下语句之一来启用它。

use feature "switch";
use v5.14;
</blockquote>

<syntaxhighlight lang="perl">
given ($t)
{
    when ("one") { say 'one'; }
    default { say 'default'; }
}

默认情况下,when中的表达式与given中的内容匹配。在某些特殊情况下,该值可以作为布尔值直接使用。

if-then语句

[编辑 | 编辑源代码]
if ($boolean_expression) {
    # do something
}

unless ($boolean_expression) {
    # do something
}

else代码块的语句(这些语句也适用于unless而不是if)

if ($boolean) {
    # do something
} else {
    # do something else
}

if ($boolean) {
    # do something
} elsif ($boolean) {
    # do something else
}

后缀表示法

[编辑 | 编辑源代码]

控制语句也可以使用条件语句紧随其后(称为“后缀”)的方式编写。此语法与上面给出的语法功能(几乎)相同。

statement if Boolean expression;
statement unless Boolean expression;
statement while Boolean expression;
statement until Boolean expression;
statement foreach list;


上一个:条件语句 索引 下一个:声明
华夏公益教科书