Скорее всего, причина, по которой ваш пуш не сработал, - порядок выполнения.
use
- это директива времени компиляции. Вы push
сделано во время выполнения:
push ( @INC,"directory_path/more_path");
use Foo.pm; # In directory path/more_path
Вы можете использовать блок BEGIN, чтобы обойти эту проблему:
BEGIN {
push ( @INC,"directory_path/more_path");
}
use Foo.pm; # In directory path/more_path
ИМО, это ясно, и поэтому лучше всего use lib
:
use lib "directory_path/more_path";
use Foo.pm; # In directory path/more_path
См. perlmod для получения информации о BEGIN и других специальных блоках и когда они выполняются.
Редактировать
Для загрузки кода относительно вашего скрипта / библиотеки я настоятельно рекомендую File :: FindLib
Вы можете сказать use File::FindLib 'my/test/libs';
, чтобы искать каталог библиотеки в любом месте выше вашего скрипта в пути.
Скажите, что ваша работа структурирована так:
/home/me/projects/
|- shared/
| |- bin/
| `- lib/
`- ossum-thing/
`- scripts
|- bin/
`- lib/
Внутри скрипта в ossum-thing/scripts/bin
:
use File::FindLib 'lib/';
use File::FindLib 'shared/lib/';
Найдет каталоги вашей библиотеки и добавит их в @INC
.
Также полезно создать модуль, содержащий все настройки среды, необходимые для запуска набора инструментов, и просто загрузить его во все исполняемые файлы вашего проекта.
use File::FindLib 'lib/MyEnvironment.pm'