我使用Perl分析我的研究数据(程序运行时,用户可以编辑或修改的多个大文件)。
在我的程序中,有脚本在分析其中一个文件中的数据之前检查文件是否完整。此检查在多个循环中进行处理。如果我只是简单地使用“ exit”,它只会退出循环。如何强制脚本退出并在退出之前为用户生成错误消息?在我的程序中,有一个定义的变量,该变量将在程序末尾输出到日志文件。我不想使用GOTO命令。非常感谢任何进一步的信息。
......
foreach $dir (@dirs)
{
...
$file="$dir$filename";
$file_size=`wc -l $file`;
$line=`grep -n TIMESTEP $file`;
#read the first line no of each frame in a data file
@values=split(/\r?\n/,$line);
$loop_i=0;
$tmp=0; #save line no for the first frame
foreach $sub_line (@values)
{
@sub_values=split(/:/,$sub_line);
$line_no[$loop_i]=$sub_values[0];
#check the line number in each frame same or not, if not quit
if($loop_i==1){$tmp=$line_no[$loop_i]-$line_no[$loop_i-1];}
elsif($loop_i>1)
{ $_=$line_no[$loop_i]-$line_no[$loop_i-1];
if($_ <> $tmp)
{$flag=0; $err_message="$err_message; incomplete data (each frame has different line number)";
exit; #cannot quit the whole program
}
}
else{;}
$loop_i++;
}#end foreach $sub_line (@values)
.....
}#end foreach $dir (@dirs)
....
答案 0 :(得分:1)
我认为您想要的是循环控件。您可以使用next
,last
或redo
提前退出循环,完全停止循环,或再次处理相同的迭代。使用嵌套循环,您可以使用标签来指定要控制的循环:
DIR: foreach my $dir ( ... ) {
...
LINE: foreach my $line ( ... ) {
next LINE if $skip_line;
last LINE if ...;
next DIR if ...;
}
}