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)加上别名)。$_

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

for并且foreach是相同的。在传统的 C 风格的 for 循环中,可以这样写:

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

这是一种有效地写同一件事的惯用方式。

而不是使用循环迭代器 ($i),您只是使用其中的值@amino_acids作为循环值。

于 2013-02-27T18:39:45.083 回答