【生信菜鸟经】如何系统入门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 条评论
登录 后参与评论

相关文章

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

c#实现打印功能

2662
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

3985
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3095
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2506
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2697
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3859
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2537
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2000

扫码关注云+社区