Perl语句末尾的@array是什么意思?

  • 本文关键字:是什么 @array 语句 Perl perl
  • 更新时间 :
  • 英文 :


我在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; }

forforeach相同。在传统的c风格的for循环中,应该这样写:

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

这是一种有效地书写同一事物的习惯方式。

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

最新更新