Я не пишу пути жестко, если у меня нет других опций.
В общем, вы не хотите жестко кодировать вещи, которые вы можете предоставить своей программе другим способом, чтобы она могла отвечатьв какой бы среде он ни находился, а не только в той среде, в которой вы его разработали.Одной из таких сред может быть ваша среда тестирования.
Вы можете установить путь поиска в библиотеке извне программы, и это сделает ее более гибкой.
И, поскольку вы жестко их кодируете и добавляете во время выполнения, они будут следовать за всем, что вы установили ранее.Вот что происходит в ваших настройках:
- Вы начинаете со значения по умолчанию
@INC
. - Вы начинаете "запускать" вашу программу, вы начинаете фазу компиляции.Он компилирует всю программу перед выполнением инструкций времени выполнения.
- При компиляции он встречает
use lib
и немедленно выполняет эту прагму.Теперь /top/priority/use/lib/second_priority
находится в начале @INC
. - Для остальной части фазы компиляции
/top/priority/use/lib/second_priority
- это первое, что есть в @INC
.Вот где последующие вызовы use
будут искать вещи. - Фаза компиляции заканчивается, и программа переходит в фазу выполнения.
- Она встречает
push
и выполняет ее.Теперь /push/inc/lowest_priority
является последним элементом @INC
. - Он пропускает
use lib
, потому что фаза компиляции обрабатывает прагму. - Он встречает
unshift
и выполняет его.Теперь /unshift/inc/lib/first_priority
является первым элементом в @INC
. - Последующие
require
вызовы (функция времени выполнения) будут сначала выглядеть как /unshift/inc/lib/first_priority
.
Я незнать, где вы ожидаете найти библиотеку, которую ожидаете загрузить, но вам необходимо указать полный путь к ней.В lib / могут быть дополнительные каталоги, которые не имеют значения.