#!/usr/local/bin/perl
sub parser
{
while(<SRCFILE> )
{
if(!eof LOGFILE)
{
print "Something";
parser();
}
else
{
**Discard Everything in stack**
}
}
}
open (LOGFILE, 'out.txt');
open (SRCFILE , 'a.txt');
parser();
我想在'else'清空堆栈。我尝试使用exit
,但执行只是停在那里没有弹出。
编辑: 我已经改变了我的要求。
答案 0 :(得分:4)
我将假设通过“丢弃堆栈中的所有内容”意味着突破递归子例程的所有级别。你有几个选择:
退出递归的标准方法是在需要返回时编写sub以正确处理大小写。从你所展示的内容来看,就像这样简单:
sub parser {
while(<SRCFILE> )
{
if(!eof LOGFILE)
{
print "Something";
parser();
}
return;
}
}
一旦eof LOGFILE
为真,您的所有函数调用都将返回(当然,根据您的sub实际需要执行的操作,它可能会变得更复杂)。
另一种选择是:
sub parser {
while(<SRCFILE> )
{
if(!eof LOGFILE)
{
print "Something";
parser();
}
else
{
die "Let's break outta here!";
}
}
}
eval { parser(); };
die
停止执行eval {}
块内的所有内容,因此您将丢弃整个调用堆栈。这可以让你做一些棘手的事情,这取决于你的最终设计需要什么。您可以通过选中die
来查看$@
语句的内容。
当您同时具有正常的返回案例和失败案例时,第二个选项最有用,并且您希望在失败案例中立即停止所有内容。