我在 Stack Overflow 中看到了这段代码,它对我有用。请解释一下。
my @amino_acids = $genetic_codes[8] =~ /[ACGT]/g;
join ',', map qq{"$_"}, @amino_acids;
$codons{$_}++ for @amino_acids;
这段代码的目的是什么for
,我尝试查看 perldocs 但无法清楚地了解它。还有什么可以代替的for
?
我在 Stack Overflow 中看到了这段代码,它对我有用。请解释一下。
my @amino_acids = $genetic_codes[8] =~ /[ACGT]/g;
join ',', map qq{"$_"}, @amino_acids;
$codons{$_}++ for @amino_acids;
这段代码的目的是什么for
,我尝试查看 perldocs 但无法清楚地了解它。还有什么可以代替的for
?
它增加%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);
在 Perl 中
foo for bar;
是一种简短的写法:
for bar { foo; }
for
并且foreach
是相同的。在传统的 C 风格的 for 循环中,可以这样写:
for (my $i = 0; $i <= $#amino_acids; $i++) {
$codons{ $amino_acids[$i] }++;
}
这是一种有效地写同一件事的惯用方式。
而不是使用循环迭代器 ($i),您只是使用其中的值@amino_acids
作为循环值。