Итак, мой код (скрипты Perl и модули Perl) находится в дереве примерно так:
trunk/
util/
process/
scripts/
В каталоге 'util' есть утилиты, которые находятся в каталоге 'process /'необходимость.Они получают доступ следующим образом:
use FindBin;
use lib "$FindBin::Bin/../util";
use UtilityModule qw(all);
Эта конструкция не заботится о том, с чего вы начинаете, если вы на том же уровне в дереве, что и "util /".
Но я решилаэтот «сценарий /» становился слишком тесным, поэтому я создал
scripts/scripts1
scripts/scripts2
Теперь я вижу, что это не работает.Если я запускаю скрипт «trunk / scripts / scripts1 / call_script.pl» и он вызывает «/trunk/process/process_script.pl», то «process_script.pl» не сможет получить подпрограммы из UtilityModule (), потому чтопуть, который возвращает FindBin, - это путь вызывающего скрипта верхнего уровня.
Первые десять способов решить все это включали что-то вроде:
use lib $path_that_came_from_elsewhere;
, но, похоже, Perl не любит это делать, кроме как с помощью этого трюка с FindBin.
Я пробовал кое-что, касающееся блоков BEGIN {}, но я действительно не знаю, что я там делаю, и, скорее всего, в итоге просто произойдет рефакторинг.Но если у кого-то есть умное понимание проблемы такого типа, это хороший шанс заработать несколько очков!