它說,在goto頁
的goto &NAME
形式從其他形式的 goto
很大的不同。事實上,它根本不是一般意義上的轉向,並且 沒有與其他gotos相關聯的恥辱感。
然後遵循回答你的問題
相反,它 退出當前子程序(損失以local()
設置的任何改變) 並立即在其位置調用使用 電流值命名的子程序的@_
。
對於正常的函數調用,在函數退出後繼續執行下一行。
該段其餘部分是很值得一讀的歡迎,並回答你的第二個問題
這是用來由希望加載另一個子例程,然後假裝其他子程序被稱爲AUTOLOAD
子程序第一個地方(除了在當前子程序中對@_
進行的任何修改都會傳播到另一個子程序中。)在goto
之後,甚至不是caller
都能夠說明此例程是先調用的。
一個基本的例子。隨着子程序deeper
某處定義,
sub func_top {
goto &deeper; # @_ is passed to it, as it is at this point
# Control never returns here
}
比較
sub func_top {
deeper(@_); # pass its own arguments
# The rest of the code here runs after deeper() returns
}
在子func_top
退出聲明goto &deeper
。所以在deeper
完成後,控制權返回到func_top
調用之後。 從某種意義上說,func_top
被替換爲deeper
。
試圖通過goto &func
傳遞參數會導致錯誤,即使只是爲goto &deeper()
。
你能舉個例子嗎? – Ganapathy
@Ganapathy我添加了一個基本的例子 - 這有幫助嗎? – zdim
感謝您的示例,我很容易從您的示例 – Ganapathy