У меня есть объектно-ориентированное веб-приложение, которое установлено в нескольких местах на моем сервере. Один раз для «живого», один раз для «бета» и т. Д. Будучи объектно-ориентированным, он состоит из множества модулей Perl. В главном модуле я должен «использовать lib» соответствующий каталог для всех пользовательских модулей perl для этого экземпляра приложения.
Это не страшно, у меня есть блок BEGIN, который проверяет местоположение основной программы и устанавливает каталог библиотеки соответствующим образом. Однако у меня также есть много утилит, программ командной строки, которые должны делать то же самое. Я не хочу вырезать и вставить этот код везде.
Как лучше всего передать этот фрагмент кода различным программам, которым он нужен?
Я не могу "использовать" его, потому что путь к библиотеке не установлен. Возможно, "do" или "require" будет правильным ответом, но оба они будут искать @INC, что неуместно.
Может быть, что-то вроде eval `cat GetLib.pl`;
было бы уместно, но кажется немного неуклюжим и хрупким.
Вот блок BEGIN, который я сейчас использую:
BEGIN {
use FindBin qw ($Bin);
require lib;
if ($Bin =~ /^\/home\/w\/myapp_live/) {
lib->import('/home/w/myapp_live/lib');
print STDERR "live site\n";
}
if ($Bin =~ /^\/home\/w\/myapp_beta/) {
lib->import('/home/w/myapp_beta/lib');
print STDERR "beta site\n";
}
if ($Bin =~ /^\/home\/w\/myapp_test/) {
lib->import('/home/w/myapp_test/lib');
print STDERR "testing site\n";
}
}
Спасибо!