1

このコードは Stack Overflow で見ましたが、うまくいきました。説明してください。

my @amino_acids = $genetic_codes[8] =~ /[ACGT]/g;
join ',', map qq{"$_"}, @amino_acids;
$codons{$_}++ for @amino_acids;

このコードの目的は何ですかfor。perldocs を調べてみましたが、明確なイメージを得ることができませんでした。の代わりに他に何が使えますforか?

4

3 に答える 3

8

%codonsで特定のアミノ酸が出現する回数の値を増やし$genetic_codes[8]ます。

手書きで書くと、最後の行は次のようになります

for my $acid (@amino_acids) {
    $codons{$acid}++;
}

構文カテゴリに関してはfor、この場合はステートメント修飾子であり、 perlsyn に文書化されています

任意の単純なステートメントの後に、終了セミコロン (またはブロック終了) の直前に単一の修飾子を任意で付けることができます。可能な修飾子は次のとおりです。

if EXPR
unless EXPR
while EXPR
until EXPR
for LIST
foreach LIST
when EXPR

...

修飾子は反復子です。LIST 内のfor(each)各項目に対してステートメントを 1 回実行します ($_各項目に順番にエイリアスを付けます)。

print "Hello $_!\n" for qw(world Dolly nurse);
于 2013-02-27T18:35:35.627 に答える
1

Perlの場合

foo for bar;

書くための短い方法です:

for bar { foo; }
于 2013-02-27T18:37:15.173 に答える
1

forforeach同じです。従来の C スタイルの for ループでは、次のように記述されます。

for (my $i = 0; $i <= $#amino_acids; $i++) {
    $codons{ $amino_acids[$i] }++;
}

これは、同じことを効果的に書く慣用的な方法です。

ループ反復子 ($i) を使用するのではなく、値を@amino_acidsループ値として使用しているだけです。

于 2013-02-27T18:39:45.083 に答える