我在 Perl 中编写了以下代码。我想一次遍历一个字符串 3 个位置(字符)。如果TAA
, TAG
, 或TGA
(终止密码子) 出现,我想打印到终止密码子并删除其余字符。
例子:
数据.txt
ATGGGTAATCCCTAGAAATTT
ATGCCATTCAAGTAACCCTTT
回答:
ATGGGTAATCCCTAG(删除最后 6 个字符)
ATGCCATTCAAGTAA(删除最后 6 个字符)
(每个序列都以 ATG 开头)。
代码:
#!/usr/bin/perl -w
open FH, "data.txt";
@a=<FH>;
foreach $tmp(@a)
{
for (my $i=0; $i<(length($tmp)-2); $i+=3)
{
if ($tmp=~/(ATG)(\w+)(TAA|TAG|TGA)\w+/)
{
print "$1$2$3\n";
}
else
{
print "$tmp\n";
}
$tmp++;
}
}
exit;
但是,我的代码没有给出正确的结果。字符不应该有任何重叠(我想每 3 个字符移动一次)。
有人可以建议如何解决错误吗?
谢谢!