当它在循环中运行时,如何强制Perl脚本退出?

时间:2019-01-07 16:11:29

标签: perl

我使用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)

....

1 个答案:

答案 0 :(得分:1)

我认为您想要的是循环控件。您可以使用nextlastredo提前退出循环,完全停止循环,或再次处理相同的迭代。使用嵌套循环,您可以使用标签来指定要控制的循环:

DIR: foreach my $dir ( ... ) {
    ...
    LINE: foreach my $line ( ... ) {
        next LINE if $skip_line;
        last LINE if ...;
        next DIR if ...;
        }
    }