在Perl语句结尾处@array的含义是什么意思?

时间:2013-02-27 18:33:25

标签: perl

我在Stack Overflow中看到了这段代码,它对我有用。请解释一下。

my @amino_acids = $genetic_codes[8] =~ /[ACGT]/g;
join ',', map qq{"$_"}, @amino_acids;
$codons{$_}++ for @amino_acids;

此代码中for的目的是什么,我尝试查看perldocs,但无法清楚地了解它。还有什么可以用来代替for

3 个答案:

答案 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)

forforeach是相同的。在传统的C风格for循环中,可以写成:

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

这是一种有效写作方式的惯用方式。

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