Perl 编程/控制流
基本控制结构与 C 编程语言或 Java 编程语言中使用的控制结构没有太大区别。
while ($boolean) {
# do something
}
until ($boolean) {
# do something
}
虽然语法相同,但 Perl 不使用break和continue来改变循环的流程。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 {} while和do {} 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";
}
请注意for和foreach实际上是同义词,可以互换使用。
块可以有一个可选的continue部分,该部分在每次迭代结束时执行。
while ($i<4) {
$i++;
} continue {
print "$i\n";
}
当在循环内部时,有三个关键字可以操作循环的处理方式。
要开始下一轮迭代,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 ($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;