跳转到内容

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)循环中,如果布尔表达式在第一次循环时计算为假(或真,分别),则不会执行该循环中的语句,即使在代码块的末尾指定也是如此。因此,以下循环在功能上是等价的:(这同样适用于do {} until)

while ($boolean) {
    # something
}

do {
    # something
} while ($boolean);

Thedo {} whiledo {} until循环在技术上是 语句修饰符,而不是实际的控制结构。这些语句将至少执行一次。

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;

另请参见

[编辑 | 编辑源代码]


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