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)循环中,如果布尔表达式在第一次循环时计算为 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";
}
注意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;