goto LABEL
goto EXPR
goto &NAME

goto LABEL 形式會尋找標記為 LABEL 的陳述式並在那裡繼續執行。它無法用於跳出給予 sort 的區塊或子常式。它可以用於跳到動態範圍內的其他任何地方,包括跳出子常式,但通常最好使用其他建構,例如 lastdie。Perl 的作者從未覺得有必要使用這種形式的 goto(在 Perl 中,C 是另一回事)。(不同之處在於 C 不提供命名迴圈與迴圈控制的組合。Perl 提供,這取代了其他語言中 goto 的大多數結構化用途。)

goto EXPR 形式預期將 EXPR 評估為程式碼參考或標籤名稱。如果它評估為程式碼參考,它將會像下面 goto &NAME 那樣處理。這對於透過 goto __SUB__ 實作尾遞迴特別有用。

如果表達式評估為標籤名稱,它的範圍將動態解析。這允許根據 FORTRAN 進行計算的 goto,但如果您要針對可維護性進行最佳化,則不建議這樣做

goto ("FOO", "BAR", "GLARCH")[$i];

如本範例所示,goto EXPR 豁免於「看起來像函式」的規則。它後面的一對括號不(一定)界定其引數。goto("NE")."XT" 等於 goto NEXT。此外,與大多數命名運算子不同,它具有與賦值相同的優先順序。

使用 goto LABELgoto EXPR 跳轉到建構中已不建議,且會發出警告。即使如此,它仍不能用於進入需要初始化的任何建構,例如子常式、foreach 迴圈或 given 區塊。一般來說,它不能用於跳轉到二元或清單運算子的參數,但可以用於跳轉到二元運算子的第一個參數。(= 指定運算子的「第一個」運算元是其右運算元。)它也不能用於進入已最佳化的建構。

goto &NAME 形式與 goto 的其他形式相當不同。事實上,它根本不是一般意義上的 goto,也沒有與其他 goto 相關的負面意涵。相反地,它會結束目前的子常式(失去 local 設定的任何變更),並立即使用 @_ 的目前值呼叫指定的子常式。這是 AUTOLOAD 子常式用來載入另一個子常式,然後假裝該子常式一開始就被呼叫(但目前子常式對 @_ 的任何修改會傳播到另一個子常式)。在 goto 之後,甚至連 caller 都無法得知這個常式是先被呼叫的。

NAME 不必是子常式的名稱;它可以是包含程式碼參考或評估為程式碼參考的區塊的純量變數。