跳轉到內容

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;

另請參見

[編輯 | 編輯原始碼]


前一個: 條件語句 索引 下一個: 宣告
華夏公益教科書