它说,在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