如何找到 Perl 脚本都用了哪些模块?
简短回答:在脚本中输出 %INC。
假设你有一个脚本,在测试环境中可以正常执行,但是你不清楚它依赖的模块在它将要运行的目标环境中是否都已安装,那么为了顺利部署你的脚本到目标环境,要做这么两件事情:
1. 确定该脚本依赖的模块
2. 确定目标环境中已安装的模块
确定系统中安装了哪些模块在 Perl 的 FAQ 3 中有回答,见 How do I find which modules are installed on my system?
要确定 Perl 脚本依赖哪些模块,有多种方法:
1. 直接在目标环境中运行这个脚本,逐一安装缺失的模块(及其依赖模块)
2. 阅读脚本的源码,确定其需要的模块(及这些模块依赖的模块)
3. 在脚本中加入输出 %INC 的语句,然后在测试环境中运行这个脚本
Perl 脚本引用模块的常见方法是使用 use 或者 require (见 perlfunc 中的 use 及 require),use/require 在执行是,会将模块名字及其实现文件插入 %INC (见 perlvar 中对 %INC 的描述)。又由于 usr/require 都是在 BEGIN 阶段(见 perlmod)执行的,因此在脚本中加入输出 %INC 语句就可以看到该脚本通过 use/require 方式引用了哪些模块。
除了 use/require 以外,Perl 脚本还可以通过 eval 或者 do 在运行时引入模块(甚至其他脚本),通过这些方式引入的模块,也可以在 %INC 中到找(当然,前提是这些语被执行了)。
阅读(1992) | 评论(0) | 转发(0) |