1

非常感谢您对早期问题的帮助。

我几乎完成了我正在做的最后一件事——特别是一个 ORF(开放阅读框)查找程序。到目前为止,我有一个名为@AminoAcidArray1 的数组。所有起始密码子都是“_”,所有终止密码子都是“X”。

如何计算 ORF?换句话说,当“_”后跟“X”且随机可忽略字符之间时,如何计算数组中的次数?我应该使用什么样的循环?我需要一个〜=我认为的某个地方

是的,我知道 bioPerl 可以轻松做到这一点,但由于某种原因,只有 activePerl 可用。

最诚挚的感谢, Shtanto

4

3 回答 3

2

首先,当代 ActivePerl 在其主要的“Activeperl”存储库中有Bundle::BioPerl 。这应该允许在某些 ActivePerl 版本上安装 BioPerl 。

然后,

print  "$-[0]..$+[0]\n" while $orf =~ /_[^X]*X/g;

如果它们是连续的(不是嵌套的),则打印 $orf 中包含的 orf 的 start- (_) 和 stop (X) 索引。如果嵌套,那么您将不得不使用稍微复杂的表达式(使用递归)。

顺便说一句:表达什么

print join ',', @AminoAcidArray1;

在您的控制台上打印?

rbo

于 2012-05-13T22:07:13.153 回答
1

如果我从您的评论中正确理解:

你有一个数组,你不需要=~运算符。

您需要遍历数组一次并记住您所谓的“阅读窗口”的当前状态。说:

my $state = 0;
my $count = 0;
for my $item (@array) {
 if ($item eq "_") {
    if ($state==0) {
       $state=1;
    }
 } elsif ($item eq "X") {
     if ($state==1) {
       $state=0;
       $count++;
    }
 }
}

return $count;
于 2012-05-13T22:07:24.043 回答
0

您的问题对您的域来说太具体了,但我的理解是您想计算数组中的一些出现次数,这就是我在以下代码中所做的(我使用perlconsole):

Perl> my @a = qw/az ae ar at ay au pr lf/
8

Perl> my $count = grep /^a/, @a
6

Perl> print "$count\n"
6
1

Perl> 
于 2012-05-13T21:04:26.290 回答