我在Stack Overflow中看到这段代码,它对我有效。请解释一下。
my @amino_acids = $genetic_codes[8] =~ /[ACGT]/g;
join ',', map qq{"$_"}, @amino_acids;
$codons{$_}++ for @amino_acids;
for
在这段代码中的目的是什么,我试着在perldocs中查找,但无法清楚地了解它。还有什么可以代替for
呢?
某一氨基酸在$genetic_codes[8]
中出现的次数增加%codons
中的值
长手写,最后一行相当于
for my $acid (@amino_acids) {
$codons{$acid}++;
}
就语法类别而言,本例中的for
是一个语句修饰符,在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);
In 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
中的值作为循环值。