2013-02-27 59 views
1

我看到在堆棧溢出此代碼,它爲我工作。請解釋它。Perl語句結尾的@array是什麼意思?

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

什麼是for在這段代碼的目的,我試圖尋找在perldocs文檔,但無法得到它的清晰畫面。還有什麼可以用來代替for

回答

8

它增加用於發生$genetic_codes[8]特定氨基酸的次數在%codons的值。

寫出手寫,最後一行是相當於

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)修飾符是一個迭代:一次執行語句列表中的每個項目(與$_化名爲依次在每個項目)。

print "Hello $_!\n" for qw(world Dolly nurse); 
+0

非常感謝你....... – Sandra 2013-02-27 18:38:18

+0

感謝您與例如解釋,到現在我知道的Perl的基本語法,並瞭解循環結構,但從未用於一行這樣弄糊塗了。 – Sandra 2013-02-27 18:41:58

+0

@Sandra不客氣。 Larry Wall借用另一種語言的Perl語句修飾符[BASIC-PLUS](https://en.wikipedia.org/wiki/BASIC-PLUS)。 – 2013-02-27 18:43:32

1

在Perl

foo for bar; 

是寫一個短的方式:

for bar { foo; } 
1

forforeach是相同的。在傳統的C風格的for循環,將被寫成:

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

這是有效寫同樣的事情的慣用方式。

與其讓你僅僅使用在@amino_acids作爲循環值值的循環迭代($ I)。

+0

我很高興你ATLEAST人解釋我這是困惑我,不喜歡聰明的程序員只是給予簡單的問題消極標記的小東西。 – Sandra 2013-02-27 18:46:15

+0

非常感謝大家...... – Sandra 2013-02-27 18:46:41

相關問題