2014-09-06 74 views
3

我正在參加一個Bioinformatics類,並且我不斷收到一個「未定義的子程序& main :: Print在ReverseComp.txt第4行調用。」錯誤Im第一次使用Perl

# ReverseComp.txt => takes DNA sequence from user 
# and returns the reverse complement 

print ("please input DNA sequence:\n"); 
$DNA =<STDIN>; 

$DNA =~tr/ATGC/TACG/; # Find complement of DNA sequence 

$DNA =~reverse ($DNA); # Reverse DNA sequence 

print ("Reverse complement of sequence is:\n"); 

print $DNA."\n"; 

這是我的代碼,我嘗試了第4行的一些不同的東西,但沒有結果。有什麼建議麼? (我從一個提示,一切都寫這看起來正確....)

+6

此代碼非常好。你可能只寫了'Print'而不是'print'。 Perl標識符和函數區分大小寫。如果你是一個perl的初學者(一般來說),最好用'use strict'和'use warnings'作爲代碼的前綴。 – 2014-09-06 07:25:57

+2

該消息顯示一個大寫'P'。那是一個小寫字母。但是上面的cose char不會顯示在你的代碼中。所以你發佈的代碼應該可以工作。 – Jens 2014-09-06 07:26:21

+1

你可能還想'chomp'從'STDIN'中讀到什麼。這將刪除字符串末尾的換行符或回車符。 – 2014-09-06 16:22:16

回答

7

我有關於你的代碼的一些注意事項:

  1. 名稱腳本與.pl延伸,而不是.txt。這是Perl腳本的普遍接受的擴展(以及Perl模塊的.pm,帶有可重用代碼的庫)

  2. 始終使用use strict; use warnings;開始腳本。這些句子可以幫助你避免常見的錯誤。使用前

  3. 聲明變量從STDIN(見my function

  4. chomp您輸入末除去換行符。

  5. 調用反轉函數很奇怪。我認爲$DNA =~ reverse ($DNA);應該是$DNA = reverse ($DNA);

  6. reverse function更常用於Perl數組;用一個字符串,你可以得到這個字符串的反轉版本,正如我所預料的那樣。

  7. print function可以採取的參數列表,這樣你就可以用一句話打印幾件事情

  8. 你可以在很多地方,例如省略括號reverse($a)reverse $a相同。兩者都是有效的,但後者更適合於編寫代碼的Perl風格。該Perl style guide是推薦閱讀

關係到你的問題,我想你的腳本是正確的,因爲在Perl中存在的打印功能,以及有關打印你得到的錯誤說(用大寫字母,這是非常重要的在Perl )。您可能會運行您在此發佈的其他腳本。

這與應用(ReverseComp.pl)之前的注意事項你的腳本:

在任何情況下,歡迎神奇的Perl世界,並準備享受您的旅程。