Я написал небольшое приложение на 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
?
Любые предложения, чтобы максимизировать гибкость местоположения, держать все вместе, минимизировать несколько сложных-кодирование места установки?