跳转到内容

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 {} whileand thedo {} 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;


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