[英]perl check for valid DNA sequence with regex
我想編寫一個子程序,它將FASTA文件作為參數並打印出序列(沒有標題)。 子程序應檢查序列是否包含除DNA鹼基(A,T,G,C)之外的任何其他字母。
這是我的代碼:
scalar_sequence ("sequence.fa");
sub scalar_sequence {
my $file = $_[0];
my $sequence;
open (READ, $file) || die "Cannot open $file: $!.\n";
while (<READ>){
if (/^>/){
next;
}
if (/^[ATCG]/){
$sequence .= $_;
} else {
die "invalid sequence\n";
}
}
print $sequence, "\n";
}
當我運行此代碼時,我得到'無效序列'作為輸出。 當我離開'else'時,即使序列包含另一個字母,它也會打印出序列。
有什么問題?
提前致謝!
問題在這里/^[ATCG]/
這一行應該是/^[ATCG]+$/
你的代碼應該是
chomp;
next if (/^>/); # skip for header
next if(/^\s*$/); #skip for empty line
if (/^[ATCG]+$/){
$sequence .= $_;
} else {
die "invalid sequence\n";
}
您只考慮以A或T或G或C開頭的行。您應該擴展匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.