Установка Perl-приложений - PullRequest
4 голосов
/ 15 октября 2010

Я написал небольшое приложение на Perl для развертывания на нескольких серверах.Он состоит из нескольких скриптов, некоторых модулей и некоторых файлов данных.Он будет использоваться несколькими пользователями.Я хотел бы хранить все эти файлы в одном каталоге, а не перемещать модули приложения в каталог site_perl.

Например, предположим, что приложение состоит из jump.pl swim.pl Common.pm и сообщений.txt

Приложение (из jump.pl или swim.pl) будет вызвано из другого каталога.Расположение установки приложения может не совпадать с $ PATH, поэтому пользователь (или другое приложение) может вызывать его по абсолютному пути, например /some/path/swim.pl, или по относительному пути, например ../path/swim.pl

.

Я бы хотел, чтобы перемещение приложения было как можно более простым, это означает, что путь к приложению должен быть как можно меньше.

В данный момент swim.pl и jump.pl начинаются какthis

#!/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 Ответ

4 голосов
/ 15 октября 2010

FindBin

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