2010-10-15 2 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

  • переменную Set среды PERL5LIB=/some/path и сделать open my $fh, '<', "$ENV{PERL5LIB}/messages.txt"
  • Установите хижину строку #!/usr/bin/perl -I/some/path - но тогда как найти messages.txt?
  • Попробуйте use Cwd qw(abs_path); и найдите способ использования basename abs_path($0) для use lib в BEGIN?

Любые предложения по обеспечению максимальной гибкости местоположения, хранению всего, минимизации множественного жесткого кодирования места установки?

ответ

4

FindBin:

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

Отлично, спасибо. Ох и привет от c.l. :-) – RedGrittyBrick

Смежные вопросы