我在Stack Overflow中看到了这段代码,它对我有用。请解释一下。
my @amino_acids = $genetic_codes[8] =~ /[ACGT]/g;
join ',', map qq{"$_"}, @amino_acids;
$codons{$_}++ for @amino_acids;
此代码中for
的目的是什么,我尝试查看perldocs,但无法清楚地了解它。还有什么可以用来代替for
?
答案 0 :(得分:8)
它将%codons
中的值增加$genetic_codes[8]
中特定氨基酸的出现次数。
写出来,最后一行相当于
for my $acid (@amino_acids) {
$codons{$acid}++;
}
就句法类别而言,for
在这种情况下是一个语句修饰符documented in perlsyn。
任何简单的语句都可以选择后跟一个单个修饰符,就在终止分号(或块结尾)之前。可能的修饰符是:
if EXPR unless EXPR while EXPR until EXPR for LIST foreach LIST when EXPR
...
for(each)
修饰符是一个迭代器:它为LIST中的每个项执行一次语句(依次为$_
别名的每个项目。)print "Hello $_!\n" for qw(world Dolly nurse);
答案 1 :(得分:1)
在Perl中
foo for bar;
是一种简短的写作方式:
for bar { foo; }
答案 2 :(得分:1)
for
和foreach
是相同的。在传统的C风格for循环中,可以写成:
for (my $i = 0; $i <= $#amino_acids; $i++) {
$codons{ $amino_acids[$i] }++;
}
这是一种有效写作方式的惯用方式。
而不是使用循环迭代器($ i),而只是使用@amino_acids
中的值作为循环值。