【生信菜鸟经】如何系统入门Perl

Perl是典型的脚本语言,短小精悍,非常容易上手,尤其适合处理文本,数据,以及系统管理。它在老一辈的生物信息学分析人员中非常流行,出于历史遗留原因大家肯定会或多或少地接触 Perl,即使你再怎么推崇Python或者GO等新兴编程语言。

1 入门资料

2 知识要点

在看书的同时,你必须记住和熟练使用的知识点是下面这些:

  • 理解perl里面的三种变量表示方式

$ 表示单个变量 用单双引号区别,q(),qq() @ 表示多个变量组成的数组,qw() % 表示关系型变量-hash 变量不严格区分类型,没有int/float/double/char这样的概念

三种变量都有对应的操作技巧:

简单变量的操作函数

Numerical operators:  <,  >, <=, >=, ==, !=, <=>, +, *
String operators:    lt, gt, le, ge, eq, ne, cmp, ., x

数组操作(pop/push/shift/unshift/splice/map/grep/join/split/sort/reverse) hash操作方式

(keys,values,each,delete,exists)

具体需要在实战里面体会:http://www.biotrainee.com/forum-90-1.html 生信人必练的200个数据处理任务(欢迎大家去练习)

变量内容交换,字符型转为数值型,字符串转为字符数组,字符串变量,heredoc,字符串分割,字符串截取,随机数生成,取整,各种概率分布数,多维矩阵如何操作,进制转换,hash翻转,数组转hash

  • 上下文环境 这个比较复杂: http://www.perlmonks.org/?node_id=738558,就是需要理解你写的程序是如何判断你的变量的,你以为的不一定是你以为的。
  • 正则表达式 这也是一个非常重要的一块内容,基础用法就是m和s,一个匹配,一个替换,比较有趣的就是1,2等等捕获变量。
  • 内建变量 就是perl语言设计的时候定义了一大堆的全局变量($_ $, $0 $> $< $! $. @ARGV @F @_ @INC %ENV %SIG) 。外表上看起来都是一个$ @ %符号后面加上一大堆的奇奇怪怪的字符,表示一些特殊变量,这也是perl语言饱受诟病的原因。但是有些非常重要,懂了它之后写程序会方便。下载一个表格,里面有近100个预定义变量需要学习的。
  • 控制语句(循环/条件/判断) if ... elsif ... else ... unless/while/next/last/for/foreach
  • 读写文件,脚本实战!
while(<>){
#do something !
}

这是我最喜欢的一个程序模板,读取文件,根据需要处理文件,然后输出。需要实现非常多的功能,然后就可以自己总结脚本技巧,也能完全掌握perl的各种语法。在生物信息学领域,需要实现的功能有!

  • perl 单行命令 我个人特别喜欢这个知识点,我也专门下载过一本书来学习,把这个教程看完就基本上能全明白:http://www.catonmat.net/blog/perl-one-liners-explained-part-one/。学习单行命令的前提是掌握非常多的奇奇怪怪的perl自定义变量和perl的基础语法,用熟练了之后就非常方便,很多生物信息学数据处理过程我现在基本不写脚本,都是直接写一行命令,完全代替了shell脚本里面的awk、sed/grep系列命令。(perl -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里面的各个功能,用自己的脚本来实现!

3 复习资料

如果你感觉学的差不多了,就可以下载一些复习资料,查漏补缺: http://michaelgoerz.net/refcards/perl_refcard.pdf https://rc.hms.harvard.edu/training/perl/Perl%20Cheat%20Sheet.pdf https://www.cheatography.com/mishin/cheat-sheets/perl-reference-card/ http://www.catonmat.net/download/perl.predefined.variables.pdf http://www.erudil.com/preqr.pdf https://www.cs.tut.fi/~jkorpela/perl/regexp.html https://support.sas.com/rnd/base/datastep/perl_regexp/regexp-tip-sheet.pdf

做一个调查吧,做生物信息数据处理的你~

最后,致敬创造了perl这个编程语言的Larry Wall !

原文发布于微信公众号 - 生信技能树(biotrainee)

原文发表时间:2017-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

基于时延的盲道研究:受限环境下的内容回传信道

在一次漏洞赏金活动中,挖到个命令注入的洞,我先以时延作为证明向厂商提交该漏洞,厂商以国内网络环境差为由(的确得翻墙)拒收,几次沟通,告知若我能取回指定文件 se...

885
来自专栏大魏分享(微信公众号:david-share)

终于搞明白了EJB!| 从开发角度看应用架构3:部署一个无状态的session bean

1893
来自专栏大魏分享(微信公众号:david-share)

非开发出身学JavaEE全集-中

当应用程序将数据存储在永久性存储中(例如flat file,XML文件或数据库的持久性数据)时,它被称为数据的持久性。 关系数据库是企业应用程序用来保存数据以供...

993
来自专栏乐百川的学习频道

Python 爬虫获取某贴吧所有成员用户名

最近想用Python爬虫搞搞百度贴吧的操作,所以我得把原来申请的小号找出来用。有一个小号我忘了具体ID,只记得其中几个字母以及某个加入的贴吧。所以今天就用爬虫来...

17810
来自专栏bluesummer

使用FluentScheduler和IIS预加载在asp.net中实现定时任务管理

1698
来自专栏腾讯移动品质中心TMQ的专栏

结合静态代码扫描来给插件间接口把把脉

如火如荼的EP建设中小鹅收到了一个小小的需求,如何知道每个版本变更了哪些插件间接口呢,有没有及时覆盖?

1966
来自专栏FreeBuf

CTF小技巧:文本解密工具 Text Decoder Toolkit

欢迎来到文本解码挑战赛! T{4 G=C 9<=E B63 3<3;G /<2 9<=E G=C@A3:4^ G=C <332 <=B 43/@ B63 @3A...

21810
来自专栏跟着阿笨一起玩NET

一步一步学Linq to sql(七):并发与事务

为了看起来清晰,我已经事先把所有分类为1产品的价格和库存修改为相同值了。然后执行下面的程序:

362
来自专栏北京马哥教育

练了一年再来总结的 Vim 使用技巧

1253
来自专栏同步博客

制作类似ThinkPHP框架中的PATHINFO模式功能(二)

  距离上一次发布的《制作类似ThinkPHP框架中的PATHINFO模式功能》(文章地址:http://www.cnblogs.com/phpstudy201...

685

扫码关注云+社区