【发布时间】:2015-03-12 14:32:25
【问题描述】:
我最近遇到了一段 perl 代码。代码如下所示
package CODE;
sub _doJob
{
$result = JOB->new(@_)->doIt();
return $result;
}
sub _doFirstJob
{
unshift @_, '1';
goto &_doJob;
}
sub _doSecondJob
{
unshift @_, '2';
goto &_doJob;
}
sub _doThirdJob
{
unshift @_, '3';
goto &_doJob;
}
然后调用类似的函数
$result = CODE::_doFirstJob($a);
$result = CODE::_doSecondJob($a);
$result = CODE::_doThirdJob($a);
问题是goto在这里有什么意义?如果我用return 编写类似的函数调用,如下所示,会出现什么问题?
package CODE;
sub _doJob
{
$result = JOB->new(@_)->doIt();
return $result;
}
sub _doFirstJob
{
unshift @_, '1';
return &_doJob(@_);
}
sub _doSecondJob
{
unshift @_, '2';
return &_doJob(@_)
}
sub _doThirdJob
{
unshift @_, '3';
return &_doJob(@_)
}
我仍然可以以同样的方式调用这些函数
$result = CODE::_doFirstJob($a);
$result = CODE::_doSecondJob($a);
$result = CODE::_doThirdJob($a);
我知道goto &NAME 实际上使 perl 退出当前函数并用调用堆栈中的新函数替换它。但是我在这里如何从中受益?
【问题讨论】:
标签: perl function return goto callstack