Perl应用程序安装

时间:2010-10-15 15:09:58

标签: perl configuration installation perl-module

我已经编写了一个小的perl应用程序,可以在几台服务器上进行部署。它由一些脚本,一些模块和一些数据文件组成。它将被多个用户使用。我想将所有这些文件放在一个目录中,而不是将应用程序模块移动到site_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/path并执行此操作 open my $fh, '<', "$ENV{PERL5LIB}/messages.txt"
  • 将shebang行设置为#!/usr/bin/perl -I/some/path - 但是如何查找messages.txt?
  • 试试use Cwd qw(abs_path); 并找到一种方法basename abs_path($0)use lib使用BEGIN

是否有任何建议可以最大限度地提高位置灵活性,将所有内容保持在一起,最大限度地减少安装位置的多个硬编码?

1 个答案:

答案 0 :(得分:4)

FindBin

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