如何系统的学习Perl语言
Perl是典型的脚本语言,短小精悍,非常容易上手,尤其适合处理文本,数据,以及系统管理。它在老一辈的生物信息学分析人员中非常流行,出于历史遗留原因大家肯定会或多或少地接触 Perl,即使你再怎么推崇Python或者GO等新兴编程语言。
1 入门资料
两个半小时入门指导:
21天学完 perl,自己搜索下载PDF书籍吧!
大小骆驼书,建议都看完,以囫囵吞枣的方式阅读,只看基础知识来入门,难点全部跳过。
官网:
函数如何用:都可以在 查到
论坛:
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)
具体需要在实战里面体会: 生信人必练的200个数据处理任务(欢迎大家去练习)
变量内容交换,字符型转为数值型,字符串转为字符数组,字符串变量,heredoc,字符串分割,字符串截取,随机数生成,取整,各种概率分布数,多维矩阵如何操作,进制转换,hash翻转,数组转hash
上下文环境
这个比较复杂: ,就是需要理解你写的程序是如何判断你的变量的,你以为的不一定是你以为的。
正则表达式
这也是一个非常重要的一块内容,基础用法就是m和s,一个匹配,一个替换,比较有趣的就是1,2等等捕获变量。
内建变量
就是perl语言设计的时候定义了一大堆的全局变量($_ $, $0 $ $ $!="" $.="" @argv="" @f="" @_="" @inc="" %env="")
。外表上看起来都是一个$ @ %符号后面加上一大堆的奇奇怪怪的字符,表示一些特殊变量,这也是perl语言饱受诟病的原因。但是有些非常重要,懂了它之后写程序会方便。下载一个表格,里面有近100个预定义变量需要学习的。
控制语句(循环/条件/判断)
if ... elsif ... else ...
unless/while/next/last/for/foreach
读写文件,脚本实战!
while(){
#do something !
}
这是我最喜欢的一个程序模板,读取文件,根据需要处理文件,然后输出。需要实现非常多的功能,然后就可以自己总结脚本技巧,也能完全掌握perl的各种语法。在生物信息学领域,需要实现的功能有!
perl 单行命令
我个人特别喜欢这个知识点,我也专门下载过一本书来学习,把这个教程看完就基本上能全明白:。学习单行命令的前提是掌握非常多的奇奇怪怪的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 复习资料
如果你感觉学的差不多了,就可以下载一些复习资料,查漏补缺:
Perl中的默认变量@_和$_什么意思?
@_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。
$_ 默认的输入/输出和格式匹配空间
--------------------------------------------------------------------------------------------------------
@_的示例:
#!/bin/perl -w
use strict;
fun( 111,222,333 );
sub fun()
{
print @_;
}
这里会把传入函数的参数111222333打印出来。
---------------------------------------------------------------------------------------------
$_示例:
下面的几对代码都是等同的:
while () {...} # equivalent only in while!
while (defined($_ = )) {...}
/^Subject:/
$_ =~ /^Subject:/
tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/
chomp
chomp($_)
以下是几处即使没有写明 Perl 也会假定使用 $_ 的地方:
* 各种单目函数,包括像 ord() 和 int() 这样的函数以及除 "-t"
以外所有的文件 测试操作 ("-f","-d"),"-t" 默认操作 STDIN。
* 各种列表函数,例如 print() 和 unlink()。
* 没有使用 "=~" 运算符时的模式匹配操作 "m//"、"s///" 和
"tr///"。
* 在没有给出其他变量时是 "foreach" 循环的默认迭代变量。
* grep() 和 map() 函数的隐含迭代变量。
* 当 "while" 仅有唯一条件,且该条件是对 "FH"
操作的结果进行测试时,$_ 就是存放输入记录的默认位置。除了
"while" 测试条件之外不会发生这种情况。
(助记:下划线在特定操作中是可以省略的。)
--------------------------------------------------------------------------------------------------
@_和$_都是perl很常用的特殊变量。建议系统看一下《perl语言入门》。
----------------------------------------------------------------------------------------------------------------
另附perl常用特殊变量列表:
perl 内置变量
$- 当前页可打印的行数,属于Perl格式系统的一部分
$! 根据上下文内容返回错误号或者错误串
$” 列表分隔符
$# 打印数字时默认的数字输出格式
$$ Perl解释器的进程ID
$% 当前输出通道的当前页号
$ 与上个格式匹配的字符串
$( 当前进程的组ID
$) 当前进程的有效组ID
$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.
$, 当前输出字段分隔符
$. 上次阅读的文件的当前输入行号
$/ 当前输入记录分隔符,默认情况是新行
$: 字符设置,此后的字符串将被分开,以填充连续的字段.
$; 在仿真多维数组时使用的分隔符.
$? 返回上一个外部命令的状态
$@ Perl解释器从eval语句返回的错误消息
$[ 数组中***个元素的索引号
$ 当前输出记录的分隔符
$] Perl解释器的子版本号
$^ 当前通道最上面的页面输出格式名字
$^A 打印前用于保存格式化数据的变量
$^D 调试标志的值
$^E 在非UNIX环境中的操作系统扩展错误信息
$^F ***的文件捆述符数值
$^H 由编译器激活的语法检查状态
$^I 内置控制编辑器的值
$^L 发送到输出通道的走纸换页符
$^M 备用内存池的大小
$^O 操作系统名
$^P 指定当前调试值的内部变量
$^R 正则表达式块的上次求值结果
$^S 当前解释器状态
$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间
$^W 警告开关的当前值
$^X Perl二进制可执行代码的名字
$_ 默认的输入/输出和格式匹配空间
$| 控制对当前选择的输出文件句柄的缓冲
$~ 当前报告格式的名字
$` 在上个格式匹配信息前的字符串
$’ 在上个格式匹配信息后的字符串
$+ 与上个正则表达式搜索格式匹配的最后一个括号
$ 当前执行解释器的用户的真实ID
$ 含有与上个匹配正则表达式对应括号结果
$= 当前页面可打印行的数目
$ 当前进程的有效用户ID
包含正在执行的脚本的文件名
$ARGV 从默认的文件句柄中读取时的当前文件名
%ENV 环境变量列表
%INC 通过do或require包含的文件列表
%SIG 信号列表及其处理方式
@_ 传给子程序的参数列表
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表
$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置
《Perl语言入门第六版(中文版)》pdf下载在线阅读,求百度网盘云资源
《Perl语言入门 第六版(中文版)》(Randal L.Schwartz)电子书网盘下载免费在线阅读
资源链接:
链接:
提取码:x1ud
书名:Perl语言入门 第六版(中文版)
作者:Randal L.Schwartz
译者:盛春
豆瓣评分:8.7
出版社:东南大学出版社
出版年份:2012-3
页数:363
内容简介:
《Perl语言入门(第6版)(中文版)》根据作者施瓦茨、福瓦、菲尼克斯从1991年开始的教学经验积累汇聚而成,多年来十分畅销。此次第六版涵盖了最新的Perl5.14版本的变化。《Perl语言入门(第6版)(中文版)》每章都包含若干习题,帮助你巩固消化刚学到的知识。也许其他书籍只是想着灌输Perl编程的条条框框,但《Perl语言入门(第6版)(中文版)》不同,我们希望把你培养成一名真正的Perl程序员。
作者简介:
作者:(美)施瓦茨、福瓦、菲尼克斯 译者:盛春
Randal L.Schwartz、brian d foy 和Tom Phoenix共同编著了数本Perl编程方面的“必读”图书,包括《Effective Perl Programming》(由Addison—Wesley出版)、《Learning Perl》、《Programming Perl》、《Intermediate Perl》以及《Mastering Perl》(原版均由0’Reilly出版)。Randal L.Schwartz、brian d foy 和Tom Phoenix共同编著了数本Perl编程方面的“必读”图书,包括《Effective Perl Programming》(由Addison—Wesley出版)、《Learning Perl》、《Programming Perl》
perl语言好学吗?之前没有任何的编程基础,能学好吗?
不难,挺好学的。
没有编程基础也可以学,我就是自学perl的。
刚开始可以从《perl语言入门》开始,这本书看下来一般的问题都能解决。
可以关注下chin***nix 论坛的perl版。
我觉得学编程最关键的是多动手
关于perl语言入门和perl语言入门答案的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。