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