2010-10-15 220 views
4

我已经编写了一个小型的perl应用程序,用于在几台服务器上进行部署。它由一些脚本,一些模块和一些数据文件组成。它将被多个用户使用。我想将所有这些文件放在一个目录中,而不是将应用程序模块移到site_perl目录。Perl应用程序安装

例如,让我们说,应用程序由jump.pl swim.pl Common.pm的和messages.txt

中的应用(或者jump.pl或swim.pl的)将被从其他目录调用。应用程序的安装位置可能无法在$ PATH,使用户(或其他应用程序)可以通过作为/some/path/swim.pl绝对路径名这样或相对路径调用它如../path/swim.pl

我想搬迁的应用尽可能简单,这意味着在尽可能少的地方拥有应用程序的路径。

目前swim.pl和jump.pl这样开始

#!/usr/bin/perl 
use strict; 
use warnings; 
use lib '/some/path'; 
use Common; 
# 
my $basedir = '/some/path'; 
... 
open my $fh, '<', "$basedir/messages.txt" or die ... ; 

所以我在几个脚本和模块的几个地点有/some/path

我已经考虑了以下尽可能的手段,尽量减少不同地方的数量来存储/some/path

  • 设置环境变量PERL5LIB=/some/pathopen my $fh, '<', "$ENV{PERL5LIB}/messages.txt"
  • 将家当线​​- 但是如何找到messages.txt?
  • 尝试use Cwd qw(abs_path); 并找到一种方法使用basename abs_path($0)use libBEGIN

任何建议来最大限度地提高位置的灵活性,保持一切,减少安装位置的多重硬编码?

回答

4

FindBin

use FindBin qw($Bin); 
use File::Spec::Functions qw(catfile updir); 
use lib catfile(updir($Bin), 'lib'); 
+0

完美,谢谢。噢和嗨从c.l.p.m. :-) – RedGrittyBrick 2010-10-15 15:53:01