生信分析——perl入门

Posted 致合生物

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生信分析——perl入门相关的知识,希望对你有一定的参考价值。


perl语言在老一辈的生物信息学分析人员中非常流行,所以因为历史遗留原因大家肯定会或多或少的接触perl,即使你再怎么推崇python或者GO。

perl是典型的脚本语言,短小精悍,非常容易上手,尤其适合处理文本,数据,以及系统管理。




Perl语言的长处: 
*强大的正则表达式和模式匹配功能(接近理想的正则表达式语言) 
*复杂灵活的数据结构(Array of Array, Array of Hash,Hash of Array, Hash of Hash等) 
*Unicode支持(相对AWK与C) 
其不足是: 
*动态类型语言,不是很可靠 
*自然语言,是优点也是缺陷,使得Perl语言代码可能晦涩难懂; 
*智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断;也因此产生种种编程陷阱。 
*不是很优美。多种方法做事,有时会让编程者无所适从。 
*性能问题。Perl灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要高性能的处理有时需要使用其它语言重写。 
Perl语言的学习曲线浅而长。只要看看《Learning Perl》,就可以编写简单的Perl程序了,然而要深入掌握Perl,要使用Perl的复杂数据结构,进行面向对象编程、多线程编程则不是那么容易的事,需要很长的时间学习和实践。


perl语言基础知识



  • Perl安装

 我选择安装的是Strawberry Perl,这个软件比较好的是它自带Perl Command Line,可以很方便的调用perl程序。如果选择其他软件,可能需要调用系统的终端窗口,比如Windows下调用cmd。

  • 检查

  如果要了解系统中是否已经安装了Perl,请打开系统终端窗口,(windows系统下的cmd)键入这行命令:perl -v

  如果输出版本号,表示Perl已经安装好了。          生信分析——perl入门


  • Perl文档资料

  每安装一个Perl,就会得到一份完整的Perl语言和解释程序的当前文档资料的拷贝。

如要运行perldoc程序,请在DOS命令提示符下,或者在Strawberry Perl安装文件夹下运行

Perl(Command Line),键入命令:perldoc perl,如下图:

  • 生信分析——perl入门

  • 第一个Perl程序

   编写Perl程序需要一个文本编辑器的实用程序(注意不是文字处理程序),如Windows的Notepad,我选择使用的是NotePad++。


①键入程序:

打开文本编辑器,键入下面这个Perl程序:

 #!/usr/bin/perl

 print"Hello,World! ";

保存名为hello或者hello.pl的文件名。(加不加扩展名,Perl都无所谓,如果想加扩展名,常用的是.pl  和.plx)


②运行程序:

如要运行hello.pl程序,需要进入一个命令行提示符下,在Windows系统,运行MS-DOS提示符。不过我调用了Strawberry的Perl(Command Line)。注意hello.pl程序的保存路径是否在Perl目录下,如果不在,用cd命令,转到存放hello.pl程序的目录中。调用命令:生信分析——perl入门


我的Perl安装在C盘的Users下,而perl程序保存在E盘的PerlFile文件夹下。

内建变量

就是perl语言设计的时候定义了一大堆的全局变量($_  $, $0 $> $< $! $. @ARGV @F @_ @INC %ENV %SIG

外表上看起来都是一个$/@/%符号后面加上一大堆的奇奇怪怪的字符,表示一些特殊变量,这也是perl语言饱受诟病的原因。

但是有些非常重要,懂了它之后写程序会方便

下载一个表格,里面有近100个预定义变量需要学习的

控制语句(循环/条件/判断)

if ... elsif ... else ...

unless/while/next/last/for/foreach

读写文件,脚本实战!

while(<>){

#do something !

}

这是我最喜欢的一个程序模板,读取文件,根据需要处理文件,然后输出。

需要实现非常多的功能,然后就可以自己总结脚本技巧,也能完全掌握perl的各种语法。

在生物信息学领域,需要实现的功能有!

perl 单行命令

学习单行命令的前提是掌握非常多的奇奇怪怪的perl自定义变量,和perl的基础语法,用熟练了之后就非常方便,很多生物信息学数据处理过程基本不写脚本,都是直接写一行命令,完全代替了shell脚本里面的awk、sed/grep系列命令。

(-p -a -n -a -l -i -F -M)

预定义函数

perl 是一个非常精简的语言,自定义的函数非常少,连min max这样常见的函数都没有,如果你需要使用这样的功能,要么自己写一个函数,要么使用加强版的包,perl的包非常多。

下面列出一些,我常用的包

程序必备 use/die/warn/print/open/close/<>/

数学函数sin/cos/log/abs/rand/srand/sqrt

字符串函数 uc/lc/scaler/index/rindex/length/pos/substr/sprintf/chop/chomp/hex/int/oct/ord/chr/unpack/unencode

defined/undef

系统操作相关

perl语言是跨平台的,因为它的执行靠的是perl解释器,而perl的解释器可以安装在任何机器上面。所以可以用perl来代替很多系统管理工作。

系统命令调用

文件句柄操作(STDIN,STDOUT,STDERR,ARGV,DATA,)

系统文件管理(mkdir/chdir/opendir/closedir/readdir/telldir/rmdir/)

一些高级技巧

自定义函数 sub , 参数传递,数组传递,返回值

模块操作(模块安装,加载,模块路径,模块函数引用)

引用(变量的变量)

选择一个好的编辑器-编译器,editplus,notepad++,jEdit,编程习惯的养成。

搞清楚perl版本的问题,还有程序编码的问题,中文显示的问题

程序调试

perl常见模块学习


perl和LWP/html做网络爬虫必备,重点是DOM如何解析

perl和CGI编程,做网站的神器,重点是html基础知识

DBI相关数据库,用perl来操作mysql等,当然,重点是mysql知识

GD and GD::Graph 可以用来画图,但是基本上没有人用了,除了CIRCOS画圈圈图火起来了。

TK模块,可以编写GUI界面程序,但是也几乎没有人用了。

XML/pdf/excel/Json 相关的模块可以用来读取非文本格式数据,或者输出格式化报告。

socket通信相关,高手甚至可以写出一个QQ的模仿版本

最后不得不提的就是Bioperl了,虽然我从来没有用过,但是它的确对初学者非常有用,大多数人不提倡重复造轮子,但我个人觉得,对初学者来说,重复造轮子是一个非常好的学习方式。大家可以仿造bioperl里面的各个功能,用自己的脚本来实现!


 

资料共享



两个半小时入门指导:https://qntm.org/files/perl/perl.html

21天学完:http://ft-sipil.unila.ac.id/dbooks/(ebook%20pdf)%20Teach%20Yourself%20Perl%20in%2021%20Days.pdf

还有大小骆驼书,建议都看完,以囫囵吞枣的方式阅读,只看基础知识来入门,难点全部跳过。

官网:https://www.perl.org/

函数如何用,都可以在http://perldoc.perl.org/perl.html 查到

论坛:http://www.perlmonks.org/



生信分析——perl入门





以上是关于生信分析——perl入门的主要内容,如果未能解决你的问题,请参考以下文章

Perl | 解题系列1-1(基础题)

利用perl下载OMIM数据

手把手教你学perl编程之题目篇

生信编程Perl教案大纲

你必须要会的生信基础套餐-perl与Linux

perl语言小骆驼学习第1章笔记