我在 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作为循环值。