Определение констант для ряда скриптов и модулей в Perl - PullRequest
1 голос
/ 08 октября 2011

Я столкнулся со следующей проблемой: я работаю над проектом на Perl, состоящим из нескольких модулей и скриптов.Проект должен выполняться на двух разных машинах.

Во всем проекте я вызываю внешние программы, но пути на обеих машинах разные, поэтому я хотел бы определить их один раз глобально для всех файлов, а затем только изменить это определение.когда я переключаю машины.

Поскольку я довольно новичок в Perl, я спрашиваю вас, как бы вы могли это сделать.Должен ли я использовать "use define" или глобальные переменные или что-то еще?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 08 октября 2011

Вместо того, чтобы определять глобальные переменные, которые могут работать или не работать, почему бы не использовать подпрограмму для поиска рабочего исполняемого файла?

my $program = program_finder();
sub program_finder {
    -x && return $_ for qw( /bin/perl /usr/bin/perl /usr/local/bin/perl );
    die "Could not find a perl executable";
}
1 голос
/ 08 октября 2011

На вашем месте, я бы определенно постарался избежать глобальных переменных - они являются признаком слабого стиля кодирования (на любом языке) и предлагают вам адское обслуживание.

Вместо этого вы могли бысоздавать и использовать файлы конфигурации - по одному для каждой из ваших машин.Находясь на Perl, у вас есть множество бесплатных, готовых к использованию модулей CPAN:

и многие, многие другие

0 голосов
/ 09 октября 2011

Создайте модуль для хранения вашей информации о конфигурации.

В файле My/Config.pm в пути к вашей библиотеке perl:

package My::Config;
use warnings;
use strict;
use Carp ();

my %setup = (
   one => {path => '/some/path'},
   two => {path => '/other/path'},
);

my $config = $setup{ $ENV{MYCONFIG} }
     or Carp::croak "environment variable MYCONFIG must be set to one of: "
              .(join ' ' => keys %setup)."\n";

sub AUTOLOAD {
    my ($key) = our $AUTOLOAD =~ /([^:]+)$/;
    exists $$config{$key} or Carp::croak "no config for '$key'";
    $$config{$key}
}

А потом в ваших файлах:

use My::Config;

my $path = My::Config->path;

И, конечно, на ваших машинах установите переменную окружения MYCONFIG на одну из клавиш в %setup.

...