为什么Perl在生物学研究中如此广泛地使用?

时间:2010-03-26 22:27:29

标签: perl bioinformatics biometrics

我作为学生在生物研究所担任支持人员,Perl似乎随处可见。不是每个项目都有,但似乎超过一半的人在办公室/办公桌上都有一些Perl书。

为什么Perl在生物学中使用了这么多?

12 个答案:

答案 0 :(得分:46)

Lincoln Stein在他的文章中强调了Perl对生物信息学的一些挽救: How Perl Saved the Human Genome Project

从他的分析:

我认为有几个因素是负责任的:

  1. Perl非常适合切片,切块,扭曲,拧干,平滑,总结和修改文本。虽然生物科学现在确实涉及大量的数值分析,但大多数主要数据仍然是文本:克隆名称,注释,注释,书目参考。甚至DNA序列都是文本的。互换不兼容的数据格式是文本修改与一些创造性猜测相结合的问题。 Perl强大的正则表达式匹配和字符串操作运算符以一种与任何其他现代语言不相称的方式简化了这项工作。

  2. Perl原谅。生物数据通常是不完整的,字段可能会丢失,或者一旦出现多次就会出现的字段(例如,因为实验是一式两份进行的),或者数据是手工输入的,并不完全符合预期的格式。如果值为空或包含奇数字符,Perl并不特别介意。可以编写正则表达式来拾取和纠正数据输入中的各种常见错误。当然,这种灵活性也可能是一种诅咒。我在下面详细介绍了Perl的问题。

  3. Perl是面向组件的。 Perl鼓励人们用小模块编写软件,使用Perl库模块或使用经典的Unix工具导向方法。可以使用管道,系统调用或套接字将外部程序轻松合并到Perl脚本中。 Perl5引入的动态加载器允许人们使用C例程扩展Perl语言,或者使整个编译库可用于Perl解释器。目前正在努力将世界上所有关于生物数据的智慧收集到一组称为“bioPerl”的模块中(稍后将在稍后在Perl期刊上发表的文章中详细讨论)。

  4. Perl易于编写和快速开发。解释器不需要事先声明所有函数原型和数据类型,新变量根据需要生成,调用未定义函数只会导致需要该功能时出错。调试器与Emacs配合良好,可以实现舒适的交互式开发。

  5. Perl是一种很好的原型语言。因为Perl是快速而又脏的,所以在将它们转换为快速编译语言之前,在Perl中构建新算法通常是有意义的。 有时事实证明Perl足够快,因此算法不必移植;更频繁的是,可以在C中编写算法的小核心,将其编译为动态加载的模块或外部可执行文件,并将其余的应用程序保留在Perl中(对于以这种方式实现的复杂基因组映射应用程序的示例,请参阅http://waldo.wi.mit.edu/ftp/distribution/software/rhmapper/)。

  6. Perl是Web CGI脚本的一种优秀语言,随着越来越多的实验室转向Web发布数据,它越来越重要。

答案 1 :(得分:15)

真正的答案可能与Perl的关系不如你想象的那么多。发生的许多事情都是历史事故。当时,回到过去,Perl非常受欢迎,Java越来越受欢迎,没有太多人关注Python,而Ruby刚刚开始。

需要完成工作的人使用Perl并在Perl中创建了一些库,其他人开始使用这些库。一旦人们开始使用对他们有用的东西,他们往往不会转换(经济学家称之为“转换成本”)。从那里开始,更多的人开始使用它,因为很多其他人正在使用它。

今天可能不会发生同样的演变。我会说Perl,Python和Ruby都完全可以完成任务。今天mobrule quotes from Lincoln Stein可以应用于三者中的任何一件事。如果每个人都必须从头开始,那么这些语言中的任何一种都可能是每个人都使用的语言。

我注意到,从我自己的客户群(生物技术的一个非常小且无代表性的样本),推动编程的人为许多生物学的东西似乎至少是兼职的系统管理员谁支持科学家们。科学家们对科学感到担忧并做了一些轻量级的编程,但IT支持人员正在为非科学部分做很多繁重的工作。 Perl非常适合作为系统管理员工具使用,因为它是互联网的管道胶带。

答案 2 :(得分:12)

可能是因为Perl善于操纵字符串,而且许多遗传学研究涉及操纵长期“ACTGCATG ...”字符串。猜猜......

答案 3 :(得分:9)

我使用大量的Perl来处理社会科学研究中的定性和定量数据。在快速完成任务(主要是文本)方面,在CPAN上找到库(漂亮的中心位置),并且通常只是快速完成任务,它无法超越。

Perl也是出色的胶水,所以如果你有一些工具记录,并且需要将它们粘贴到数据分析程序中,那么Perl就是你的语言。

答案 4 :(得分:7)

Perl似乎是生物信息学的首选语言 - 在这个主题上甚至还有一个O'Reilly标题: Beginning Perl for Bioinformatics

答案 5 :(得分:5)

Perl在处理文本方面非常强大,而且它几乎存在于每个Linux / Unix发行版中。在生物信息学中,不仅序列数据很容易用Perl操作,而且大多数生物信息学算法都会输出某种文本结果。

然后,像EBI这样的最大的生物信息学中心有一个伟大的家伙,Ewan Birney,他领导着BioPerl项目。该库有许多解析器,可用于各种流行的生物信息学算法的结果,以及操作主要序列数据库中使用的不同序列格式。

然而,如今,Perl并不是生物信息学家使用的唯一语言:与序列数据一起,实验室产生越来越多不同类型的数据类型,而其他语言更常用于这些领域。

例如,R统计编程语言被广泛用于微阵列和qPCR数据(以及其他)的统计分析。再说一遍,为什么我们这么用呢?因为它有适合这种数据的优秀库(参见bioconductor项目)。

现在谈到网络开发时,CGI并不是今天最先进的技术,但知道Perl的人可能会坚持下去。在我的公司虽然不再使用...

我希望这会有所帮助。

答案 6 :(得分:3)

Perl基本上迫使开发周期非常短暂。这就是那种完成任务的开发方式。

这足以超过Perl的劣势。

答案 7 :(得分:2)

生物信息学主要处理文本解析,而Perl是用于字符串解析的最佳编程语言。正如O'Reilly的书(Beginning Perl for Bioinformatics)所说,“凭借[Perl]高度发展的数据检测能力,Perl已经成为最流行的生物数据分析语言之一。”

答案 8 :(得分:1)

这似乎是一个非常全面的回应。然而,也许缺少的一件事是,大多数生物学家(可能直到最近)根本没有太多的编程经验。 Perl的学习曲线 低于编译语言(如C或Java),但Perl在文本处理方面仍然提供了大量功能。那么如果运行需要更长时间呢?生物学家肯定能处理这个问题。实验室实验通常需要一个小时或更长的时间,所以等待几分钟才能完成数据处理并不会杀死它们!

请注意,我在这里谈论的是生物学家必须编程。我知道有一些非常熟练的程序员和计算机科学家也使用Perl,这些评论可能不适用于他们。

答案 9 :(得分:1)

人们错过了DBI,这是一个Perl抽象数据库界面,可以很容易地使用生物信息数据库。

还有one-liner角度。你可以写一些东西来重新格式化Perl中的一行数据,只需使用-pe标志将其嵌入命令行。许多使用AWKsed的人转移到了Perl。即使在完整的程序中,文件I / O也非常容易和快速编写,与任何工程语言相比,文本转换具有很高的表现力。使用Java甚至Python进行一次性文本转换的人都懒得学习另一种语言。 Java尤其高度依赖JVM实现及其I / O性能。

至少你知道Perl到底有多快或多慢,比C I / O稍慢。不要了解grepcutsedAWK;只是学习Perl作为命令行工具,即使你不用它生成大型程序。关于CGI,Perl拥有许多更好的Web框架,例如CatalystMojolicious,但思想共享肯定来自CGI和生物信息学是最早的互联网重度用户之一。

答案 10 :(得分:0)

与其他语言相比,Perl非常容易学习。它可以充分利用正在成为大数据的生物数据。它可以操纵大数据,并且可以很好地处理操作数据和所有类型的DNA编程,生物学自动化已经变得很容易,因为Perl,Python和Ruby等语言。对于那些了解生物学但不知道如何用其他编程语言编程的人来说,这很容易。

答案 11 :(得分:0)

就个人而言,我知道这会和我约会,但这是因为我先学习了Perl。我被要求提取FASTA个文件并与其他FASTA文件混合使用。当我四处询问时,Perl是推荐的工具。

当时我经历过一些计算机科学课程,但我并不是很了解编程。

事实证明,Perl相当容易学习。一旦我得到regular expressions,我就会在一天内解析并制作新的FASTA文件。

正如所建议的,我不是程序员。我是一名在实验室工作的生物化学毕业生,我错误地设置了一个Linux服务器,每个人都可以看到我。这是在那个全天项目的那一天。

无论如何,Perl成为了我在实验室周围需要做的事情。它很棒,易于使用,超级灵活,其他实验室中的其他Perl人我们很像我。

因此,为了缩短它,Perl易于学习,灵活和宽容,并且它做了我需要的。

一旦我真正进入生物信息学,我就会选择R,Python甚至Java。 Perl在帮助创建可维护代码方面并不是那么出色,主要是因为它非常灵活。现在我只是使用这种语言来做这项工作,但Perl仍然是我最喜欢的语言之一,比如初吻或其他什么。

重申一下,大多数生物信息学人员通过将各种东西拼凑在一起来学习编码,而且大多数时候你只是试图获得principal investigator(PI)的答案,所以你不能花几天时间代码设计。 Perl在获得答案方面非常出色,它可能不会再次运行,如果你在六个月后看到它,你就不会理解你自己的代码中的任何内容。但如果你现在需要一些东西,那么即使我现在主要使用Python,它也是一个不错的选择。

我希望能给你一个住过它的人的答案。