У вас есть две проблемы:
-I
не относится к файлам, указанным в командной строке, только к модулям, загруженным с require
или use
.
Вы не должны использовать относительные каталоги с -I
.Если ваш сценарий выполняет chdir
, то этот каталог теперь относится к текущему каталогу new , а не к текущему на момент запуска сценария.(Во многих случаях вы можете избежать нарушения этого правила, потому что большую часть времени модули загружаются при запуске сценария до того, как он изменил каталоги.)
И вы на самом деле не используете относительноекаталог в любом случае, потому что вы сказали -I/p2
, что означает поиск в каталоге с именем /p2
, а не в подкаталоге с именем p2
в текущем каталоге (что вы и хотели сказать).
Попробуйте:
perl -I$PWD/p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4
(при условии, что вы используете оболочку типа Unix).
Во многих случаях лучшим решением является настройка скрипта@INC
автоматически.Вверху p2/maxconnect4.pl
(перед загрузкой любых модулей из p2
поставьте):
use FindBin;
use lib $FindBin::Bin;
use lib
- это программная версия переключателя -I
,и FindBin сообщает вашему сценарию путь к каталогу, в котором он находится.Тогда вы можете просто сказать:
perl p2/maxconnect4.pl arg1 arg2 arg3 arg4
и вообще не беспокоиться о -I
.