本文介绍了如何使用 plenv 来管理多版本的 perl ,并且解决利用 Fetch Scripts 下载波形数据时遇到的问题。

安装 plenv

plenv 用来管理多版本 perl ,使得各版本 perl 可以在系统上互不干扰。

# 安装 plenv
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv
$ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(plenv init -)"' >> ~/.bashrc
$ exec $SHELL -l
# 安装 plenv 的 build 插件
$ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/
# 查看可安装的 perl 版本
$ plenv install --list 
# 安装最新版本
$ plenv install 5.26.0
# 更新数据库
$ plenv rehash
# 修改全局 perl 版本
$ plenv versions
$ plenv global 5.26.0

安装 cpanm

perl 的 cpan 工具用来安装和管理众多模块, cpanm 与 cpan 类似,但是功能更加强大,可以根据当前 perl 版本将模块安装到对应路径,而不会对系统自带和其它 perl 版本的模块产生任何影响。

# 安装 cpanm
$ plenv install-cpanm
# 安装模块
$ cpanm install XML::SAX 
$ cpanm install Bundle::LWP
$ cpanm install XML::SAX::ExpatXS

可能的问题

安装指定版本 perl 时可能会提示 No patch utility found ,安装 patch 工具即可解决

$ sudo yum install patch

在 Centos7 下安装 Bundle::LWP 模块可能还需要安装依赖 libwww-perl

$ yum search libwww-perl
已加载插件:axelget, fastestmirror, langpacks
No metadata available for base
No metadata available for epel
No metadata available for extras
No metadata available for google-chrome-mirrors
No metadata available for nux-dextop
No metadata available for updates
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirror01.idc.hinet.net
 * extras: mirrors.aliyun.com
 * nux-dextop: li.nux.ro
 * updates: mirrors.sohu.com
=========================== N/S matched: libwww-perl ===========================
perl-libwww-perl.noarch : A Perl interface to the World-Wide Web
$ sudo yum install perl-libwww-perl.noarch

安装 XML::SAX::ExpatXS 模块有时会提示缺少头文件 expat.h ,此时需要安装依赖。

$ sudo apt-get install libexpat1-dev   # Ubuntu 执行这条命令
$ sudo yum install expat-devel        # Centos7 执行这条命令

安装依赖后便可顺利安装 XML::SAX::ExpatXS 模块。

Web Service Fetch Script 整个工具包含了三个 perl 脚本和一个 python 脚本

perl 脚本: FetchDataFetchEventFetchMetadata

python 脚本: FetchSyn

具体用法参考官方示例

可将四个脚本放置到能直接引用的路径中并将其版本号删除,如

$ mv FetchData-2015.246 ~/bin/FetchData

参考文献