Perl 语言学习
从语法特点、模块安装到生态项目的入门指南
Perl 背景
Perl 全称为 Practical Extraction and Report Language,意为「实用提取和报告语言」。
Perl 由 Larry Wall 于 1987 年创建,其灵感来自 C、sed、awk、shell 脚本以及许多其他编程语言的特性。
Perl 的哲学是「There’s More Than One Way To Do It」(通常缩写为 TMTOWTDI,发音类似「Tim Toady」),即「做一件事不止一种方法」。因此,Perl 也常被称为「程序员的瑞士军刀」。
Perl 特点
- Perl 语法类似于 C 语言(Perl 源于 Unix),语句由分号划分,代码层次使用花括号
{}划分,但不必显式声明变量类型。 - 标量变量以
$开头(如$name),数组以@开头(如@name),哈希以%开头(如%name),这三类是类型标识符;文件句柄则没有特殊前缀。 - 哈希可以用列表来创建,但访问键值时使用花括号
{}而非圆括号(这一点尤其需要注意)。 - 数值之间比较用
==、>=、<=、!=,字符串之间比较则用eq、gt、lt、ge、le。 print函数不一定需要括号,常见用法有:print $name(直接输出标量);print '$name'(单引号原样输出,不会替换变量,基本不用);print "$name"(双引号会自动替换变量,常用)。注意:当print用于向文件句柄输出时,句柄与列表之间不能用逗号,只能用空格分隔,例如print FH "hello\n";。@_是子程序接收参数的默认数组,可以从中取实参;$_是默认变量,表示在不显式指定时程序正在处理的当前变量;shift函数会将数组的第一个元素(即$array[0])移出并返回。shift函数缺省时操作@_,因此常放在子程序开头用于接收参数,或放在文件开头用于接收命令行参数。- 文件句柄与文件的关系:文件必须先打开并被赋予句柄,才能操作;某些句柄可直接使用,如
STDIN、STDOUT、STDERR;广义上,标量变量也是一种代表数据的「句柄」。 - Perl 中数值和字符串都可以使用递增(
++)和递减(--)运算符。
Perl 模块安装
自 1994 年 10 月 17 日发布的 Perl 5.000 起,Perl 引入了模块(module)的概念,用以提供面向对象编程能力。这是 Perl 语言发展史上的一个里程碑。此后,社区开发者贡献了大量功能强大、构思精巧的 Perl 模块,极大地扩展了 Perl 的功能。
CPAN(Comprehensive Perl Archive Network,综合 Perl 归档网络)是 Perl 模块最大的集散地,收录了几乎所有的 Perl 模块。CPAN 自 1995 年 10 月起上线,据其官网统计,目前已收录由 14,000 余位作者上传的 4 万余个发行版(distribution)。
Perl 作为生物信息学数据预处理、文本处理和格式转换中的一把「瑞士军刀」,其强大与重要性不言而喻。下面介绍各平台下 Perl 模块的安装方法,以安装 Bio::SeqIO 模块为例。
一、Linux 下安装 Perl 模块
Linux/Unix 下安装 Perl 模块主要有两种方法:手工安装和自动安装。
- 手工安装:从 CPAN 下载所需模块的源码包,手工编译、安装。
- 自动安装:使用 CPAN 客户端自动完成下载、编译、安装的全过程。
手工安装
以 BioPerl 1.7.5 为例(当前最新稳定版为 1.7.8):
tar xvzf BioPerl-1.7.5.tar.gz
cd BioPerl-1.7.5
perl Makefile.PL # 可选: PREFIX=/home/yourname/perl_modules
make
make test # 测试模块(可选)
make install
# 验证是否安装成功,若该命令无任何输出则表示成功
perl -MBio::SeqIO -e1自动安装
Linux/Unix 下自动安装 Perl 模块主要有两种方式:
- 使用
perl -MCPAN -e 'install 模块名'; - 直接使用
cpan 模块名命令。
二者本质上都是通过与 CPAN 交互来完成自动下载、编译、安装。初次运行 CPAN 客户端时需要做一些配置,执行下面的命令进入交互式 shell 即可:
perl -MCPAN -e shell开源项目参考
- lcov —— GCC 覆盖率测试工具的前端,生成 HTML 格式的代码覆盖率报告。
- Mojolicious —— Perl 实时 Web 开发框架。
- Dancer2 —— Perl 轻量级 Web 框架。
- MySQLTuner —— MySQL 性能调优脚本。