2014-09-06 73 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世界,并准备享受您的旅程。