【发布时间】:2012-07-31 11:50:26
【问题描述】:
我接手了一个用 Perl 编写的项目,它有一些依赖项,例如 Template::Toolkit、Image::ExifTool 和 GD 等等。目前,这些依赖项使用make 中的--prefix 选项构建到一个目录(“deps”文件夹)中。在主 Perl 脚本中,我有类似以下的内容来导入必要的模块:
use File::Spec::Functions qw(catdir);
use lib "lib";
use lib catdir(qw(deps lib perl5 site_perl));
catdir 用于偏离某些系统要求(例如假设“/”是文件夹分隔符;如果有人有其他选择,我愿意接受建议!)。 “lib”文件夹包含我的模块,“deps/lib/perl5/site_perl”文件夹是我的依赖项安装在我原来的机器上的位置。
但是,在另一台机器上构建依赖项后,所需的库似乎已移动到不同的文件夹中。我现在需要使用这些语句来让我的脚本正确运行:
use File::Spec::Functions qw(catdir);
use lib "lib";
use lib catdir(qw(deps lib perl 5.14.2));
use lib catdir(qw(deps share perl 5.14.2));
我想知道是否有指定前缀目录(“deps”)并让use lib pragma 递归搜索该目录以查找我的依赖项。此外,此脚本的用户无法访问 Internet,因此将我的项目编译为 CPAN 模块会适得其反。
感谢大家的帮助!
【问题讨论】:
-
Perl 支持的所有系统都使用“/”。
require Foo::Bar;字面意思是require 'Foo/Bar.pm';。 -
谢谢!经过进一步研究,我看到 Perl 自己处理文件分隔符。但是,perlmonks.org/?displaytype=print;node_id=110030;replies=1 告诉我 MacOS 9 的情况并非如此。尽管该线程似乎已经过时了...
-
不,Perl 根本不处理文件分隔符。那个帖子是错的。 Windows 原生完全支持“/”。
-
我认为 INSTALL_BASE 是我想要的 (perldoc.perl.org/ExtUtils/MakeMaker.html#INSTALL_BASE)。我应该能够使用 INSTALL_BASE/lib/perl5/$Config{archname} 获得正确的目录,对吧?