Perl的学习继续

今天是生信星球陪你的第75天

你想找辆共享单车,发现满街都是别家车,没有一辆你能骑。

你想学点生信,搜了“初学者教程”,满眼尽是高大上,没有一句能看懂。

终于你跨越茫茫宇宙,来到生信星球,发现了初学者的新大陆!

.子程序

之前用过了chomp、print等,perl还能让用户自定义函数,方便利用已有的代码

使用定义【不能以数字开头,最好名字和函数功能相关,不要和内置函数重名】

每个子程序都有一个返回值,而运行子程序要的就是返回值

最简单的使用:

子程序的参数与返回值--输入与输出:

上面的简单使用,没有加上任何参数就会输出字符串这样一个标量;

当然,也可以对子程序输入数组、哈希、文件等参数,然后输出标量、数组或者哈希。

默认将子程序的最后一个表达式的结果作为子程序的返回值,如果想返回中间一个表达式,使用 函数

这里以一个加法运算来学习:

统计fasta信息的子程序:

程序思路:输入有一个,gene id与序列文件对应的哈希列表【格式为id=序列文件】。输出要有三列,一列是gene id,一列是基因数量,一列是基因平均长度。

读取fasta文件时,将修改分隔符为,这样一次就能读进来整段序列,将每段序列存储到哈希中,序列的id为哈希的键,序列为值

.Perl常见问题:

Perl的编程过程中,会出现各种各样的问题,需要不断调试。有时候很头疼的就是,即使按照别人的程序敲一遍还是会报错

错误一:忘记加分号

分号在Perl中代表一个完整的语句,忘记加分号就会提示语法错误,并且运行会给出具体出错行数

这里显示第四行有问题,如果在一个大程序中,要快速跳转到某一行,使用 ,因为上一行没有分号

错误二:是否需要用my定义

很多时候需要使用 编译命令,这是就要要使用 来编译变量,而且不能重复定义

错误三:拼写错误

这个在很多编程中都会存在,拼写错误会提示变量没有被声明

这个问题在文本编辑器如Vim中会帮助我们解决,如果某个变量输入错误,比如输入为 ,Vim会通过颜色不同(正确有颜色,错误为白色)

对于变量输入,最好使用vim自带的 或 的自动补全功能,这样可以避免错误

错误四:大括号的使用

尤其使用if嵌套循环时,每一个大括号是一个程序块,如果缺失某一对配对的大括号其中一个,就会提示 ;如果大括号多了一个,会提示

避免报错小技能:

(check)运行之前先检查一下是否书写有问题

(debug)一种交互的perl编程模式,适用于长的脚本。 列出命令的10行;如果要列出某几行,就用这样的

详细信息可以参考

.正则表达式:重要的特性!

Perl的正则表达式是内建的,为Perl提供了快速、灵活的字符串处理

Perl中的正则也叫做“模式匹配”,是用来匹配某字符串的模版;

日常使用中,模式匹配无处不在,例如使用搜索引擎,在搜索框内输入关键字,就能返回信息,他就是利用了正则表达式

一个简单的例子:

元字符:

替换单个字符(一对一替换),不能替换换行符

转义符,例如匹配本身要使用

表示数量的

【例如在root用户下,使用 叫做“自杀模式”】,与配合使用表示任意字符出现0次或多次 【0—∞】

表示至少一次 【1—∞】

表示0次或1次【范围最小】

花括号中指定重复次数,例如匹配1-5次bioinfo中的o

如果要制定整个单词次数,用小括号进行分组 这个表示匹配bioinfo3次;表示匹配bioinfo一次以上

关于字符集:

匹配字符集的单个字符 匹配bat、cat、fat其中一个,等同于 或者更简单的 (表示b-f连续的字母加wz)

[a-z]、[A-Z]、 、

表示空白,例如

反义字符集:利用 ,例如 等于 等于,表示不匹配数字 【反斜线加大些字母表示不匹配】

要排除某个匹配,用

生信模式匹配小练习:

现在有一些序列,下载地址 打开后是这样:

想寻找开头是CCG,结尾是TTG的序列

单词锚定:

挖掘文本信息:

一般本地blast的format 0结果中,会有匹配的分值(Score)、期望值(Expect)、一致性(Identities)、准确度(Positives)、Gaps等信息,可以挖掘这些信息

改进版:

另外还有一个s(替换模式),例如

对序列进行处理:

得到序列的反向/互补序列

序列全变大些/小写

另外这些大小写语句除了在s模式下使用,还能在双引号内使用,例如在print 语句中格式化输出

输出结果是 【注意这里的\E是终止前面\U命令的意思】

贪婪匹配 -- 匹配尽可能多的内容

一般 会匹配尽量多的内容,比如上个例子 中,如果匹配模式是 ,即使中间也出现了CAT,程序也不会停下,他会一直匹配到结尾的CAT,这就是贪婪;

贪婪的对立面就是节俭,这种模式可以在 的基础上加上 ,也就是 就输出最短的序列

格式化序列

有时一个fasta文件中序列长短不一,并且有的换行有的不换行,这样看起来就很难看。这时就可以将序列格式化,让每行保证一定量的字符【可以自定义】,并且加换行符。

测试fasta下载:

初学生信,很荣幸带你迈出第一步。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724G1W9MB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励