4

我编写了一个小型 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 libin的方法BEGIN

有什么建议可以最大限度地提高位置的灵活性、将所有东西放在一起、最大限度地减少安装位置的多个硬编码?

4

1 回答 1

4

查找箱

use FindBin qw( $Bin );
use File::Spec::Functions qw( catfile updir );
use lib catfile( updir($Bin), 'lib');
于 2010-10-15T15:13:08.043 回答