我使用Bio::PopGen::PopStats来计算Wright's Fst我在输入文件中读取的每一行。我的输入文件包括大约500,000的线条,所以我计算该统计500,000次,如下所示:如果产生错误,我该如何跳过一行/迭代?
use Bio::PopGen::PopStats;
my $stats = Bio::PopGen::PopStats->new();
my $fst = $stats->Fst(\@populations,\@markernames);
push(@fsts, $fst);
我阵列@fsts
在保存各f ST值,因为在我使用所有500000 FSTS计算结束一些汇总统计。
如果模块不能计算在F ST为50万线,整个Perl脚本停止之一,并给出错误信息,通常这一个:
Illegal division by zero at /usr/share/perl5/Bio/PopGen/PopStats.pm line 292, <READ2> line 10878.
,我想我的程序给出这个错误信息,但不是停止,而是跳过这一行(在@fsts
阵列中没有为这行写入任何内容),并完成500,000行的其余部分。有什么建议么?
'的eval {...; 1}或警告$ @'是使用eval的更安全的方法。在失败的eval后,'$ @'应该是真的,但是有一些情况不会发生。但是一个失败的eval将总是返回false,所以如果你在成功时返回true,那么eval就会变成一个布尔值,并且它的状态。 – 2012-01-30 14:01:39
@Eric:你能提供一个这样的案例吗? – 2012-01-30 14:10:13
参见http://use.perl.org/~grantm/journal/38375。我会继续编辑它。 – daxim 2012-01-30 15:01:49