第一章 新手上路
友情提醒:学习 Perl
BioPerl 是 Perl 的扩展模块,所以在学习 BioPerl 之前自然应该了解 Perl 语言。哦,错了,不只是了解,应该熟练掌握!
至少就我们国家的情况来看,Perl 作为一门编程语言在计算机程序员中还不是很流行(相比较而言 C 或 C++ 之类的编译型语言更受欢迎),但幸运的是介绍 Perl 语言的教材却不少,可见以 Perl、Python 为代表的“解释型”语言在IT界也是越来越有活力了。在此我向大家隆重推荐由 O'Reilly Media, Inc 出版,Randal L.Schwartz, Tom Phoenix 和 brian d foy 编著的入门教材 Learning Perl,写得相当精彩有趣。基本上掌握了这本书的内容就相当于掌握了 Perl 编程的基础。我们都亲切地称之为 “小驼书”。
关于模块
BioPerl 就是一组 Perl 的模块,所以在学习 BioPerl 之前了解一下 Perl 的模块知识也是十分重要的。
来看“小驼书”中的一个例子:在变量 $name 中存放了一个文件路径名,请取出它的文件基名(basename)和目录名(dirname),再把它们重新连接成完整的文件名(咋一看这个操作很无聊,没关系,这只是个例子而已)。
如果不用模块,就得这么写:
my $name = "/usr/local/bin/perl"; (my $basename = $name) = ~s%.*/%%; # 取出文件基名$basename (my $dirname = $name) = ~s%(.*)/.*$%$1%; # 取出目录名$dirname my $filename = "$dirname/$basename"; # 将文件基名和目录名连接起来
第二句和第三句实在是很令人困惑,看了半天才能想清楚 s%(.*)/.*$%$1%
是要干什么。如果改用模块写,就稍微清楚一些:
use File::Basename; use File::Spec; my $name = "/usr/local/bin/perl"; my $basename = basename $name; my $dirname = dirname $name; # 现在是动听的名字basename和dirname, # 而非枯燥的s%.*/%% my $filename = File::Spec->catfile($dirname,$basename);
模块 FAQ
详细的模块知识需要参考《Intermediate Perl》(俗称羊驼书)。由于这本书目前尚无中文翻译版,故没有小驼书那么普及。不过,如果你只想用一用 BioPerl,那么不看羊驼书也没关系。
(1)use File::Basename;
这句代码为什么中间有两个冒号?
答:这是告诉 Perl 你需要使用的模块的名称和路径。我们要用的模块名称叫做 Basename.pm(后缀名 .pm 不写),它是存放在 File 这个 文件夹里。那么 File 这个文件夹是存放在什么地方呢?这就要提到 Perl 里面一个很重要的特殊数组:@INC。你不妨可以在终端键入这条命令(其实是一条非常简短的 Perl 程序,打印出数组 @INC 的内容)
perl -e 'print "@INC\n"';
我的结果是这样的:
/etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .
一共显示了 9 个目录!(包括一个当前目录,就是最后那个点号.)当 Perl 看到了 use 语句之后,就会依次沿着这 9 个目录去寻找 File 这个文件夹。现在你应该明白这是怎么一回事了吧?
(2)我如何知道自己需要使用那些模块?还有模块的位置?
答:这个就没有捷径了,只能自己勤查文档。
(3)我如何知道系统上是否已经安装了某个模块?
答:使用 perldoc 命令(后面跟上模块名就行了,比如 perldoc File::Basename), 可以查看模块的文档。只要能打开它的文档,当然就说明已经安装了对应的模块。(在“小驼书”上亦有有对应的说明,仔细找找吧~)
(4)如果系统上恰好没有安装我需要的模块,我该怎么自己安装?
答:方法有以下几种
- 源代码安装:“小驼书”上也有,就是像安装经典的(古老的)UNIX 软件那样安装,比较麻烦,极不推荐。
- 使用 CPAN 来安装,十分简单,只要一句命令就 OK。极力推荐。
cpan ModuleName
当然有几个前提:你必须有 Internet 连接,你得有 ROOT 权限。(没有 ROOT 也没关系,有一个变通办法可以解决。) - 不安装,直接把模块文件 .pm 文件下载下来,扔到某一个 @INC 列表里面的目录里就 OK,推荐给懒人使用。但有时行不通,比如模块之间相互依赖时。
- 在 Windows 上使用 Perl 包管理器(PPM)来安装,但是在 Windows 上编写和运行 BioPerl 本身就不是一件非常完美的事情,所以大家慎重考虑。
我怎样安装 BioPerl?
有些 Linux 发行版会在软件源中提供 bioperl,安装就比较方便。比如 Ubuntu,在自己的“软件中心”中就可以找到 bioperl 这个软件包,相当方便。
对于没有专门提供 bioperl 软件包的操作系统,或者对于 Windows 操作系统来说,安装会稍微麻烦一些。BioPerl的官方网站给出了详细的安装说明:
此外上面说到的“懒人方法”也是适用的,就是把 .pm 文件下载下来,扔到某个 @INC 里面。(注意如果是 A::B::C 这种类型的,就要小心目录结构了)
面向对象
BioPerl 的大部分模块都是面向对象的!“面向对象”是一个听起来既时髦又悬乎的词语。
您可能会说,我从来没听说过 Perl 语言是面向对象的呀。 其实,所谓的“面向对象”和“面向过程”不过是一种编程的思路而已,与具体语言无关。我们开始学习编程时无一例外地接触的是面向过程。那么两者之间的差别在哪儿呢?差别非常大,但是又很有趣。请听下回分解。