パターンコンパイラを作ります。 quotemeta
で
sub make_counter {
my @sequences = @_;
my $pattern = "(?:" . join("|", map quotemeta, @sequences) . ")";
my $compiled = eval q<
sub {
local($_) = @_;
my $n =() = /$pattern/g;
}
>;
if (defined $compiled) {
return $compiled;
}
else {
die "$0: internal: counter compilation failed:\[email protected]\n";
}
}
、我々は特別な意味で自分に合うようにシーケンス内のすべての文字を強制します。マッチをカウントするためのファンキーなビットというSection 4 of the Perl FAQを説明します。
別のバージョンがリストコンテキストでグローバルに一致したものを使用し、その後、試合の数のカウントを生成、スカラーに結果を割り当てます。
$count =() = $string =~ /-\d+/g;
それはあなたの順序で迷惑メールを許容することに注意してください。例えば、
my @nucleotides = qw/ G A T C /;
my $numnuc = make_counter @nucleotides;
print $numnuc->("xGxAxTxxxxTyA1C2A"), "\n";
出力でヌクレオチドを数える:
7
カウントコドンを
my @codons = qw(
TTT TCT TAT TGT TTC TCC TAC TGC TTA TCA TAA TGA
TTG TCG TAG TGG CTT CCT CAT CGT CTC CCC CAC CGC
CTA CCA CAA CGA CTG CCG CAG CGG ATT ACT AAT AGT
ATC ACC AAC AGC ATA ACA AAA AGA ATG ACG AAG AGG
GTT GCT GAT GGT GTC GCC GAC GGC GTA GCA GAA GGA
GTG GCG GAG GGG
);
my $numcod = make_counter @codons;
print $numcod->("GAG-GGG!AGG,TAT#TTT");
注意して任意のジャンクは、存在する場合、間コドン配列が起こらなければならないこと。
出力:
5
'/// TR'演算子は文字ごとに動作します。あなたがコドンを数えたいと思っているときは、あなたを助けません。 –