Добавление пути к @INC, но не в сценарии Perl - PullRequest
1 голос
/ 23 апреля 2019

Я владелец инструмента, написанного на Perl и Java.Один из сценариев использует такие модули, как JSON и Data::Dumper.Моя среда и мои @INC знают, где находятся эти модули.Но у пользователя, использующего мой инструмент, есть ошибка:

Can't locate JSON.pm in @INC (@INC contains: <PATHS> .) at /tools/bin/myscript.pl line 15.

Я понимаю, как работает @INC, и мне просто интересно, как правильно решить эту проблему.Мы работаем в одной компании (в разных регионах), поэтому у пользователя есть права доступа к области, в которой находятся эти модули.С моей стороны, сценарии работают нормально, потому что мой @INC содержит путь к области с этими модулями.

Из предыдущих тем я узнал, что могу установить PERL5LIB с областью, которая содержит (не рекурсивный) пакет.Но эта проблема кажется недостаточно хорошей, потому что тогда мне придется указать несколько путей (поскольку JSON и Data :: Dumper не находятся в одной области и PERL5LIB проверяет модули в каталоге, но не рекурсивно).

Кроме того, из предыдущих потоков я узнал, что я могу запустить perl -I myscript.pl, но это не помогает, потому что мой инструмент в основном Java, который выполняет Perl.Более того, я предпочитаю ничего не менять в самом скрипте, а в среде пользователя.

Каким был бы способ решения такого рода проблем?Есть ли способ «протолкнуть» путь к @INC из Linux?Как предотвратить подобные проблемы в будущем?

1 Ответ

2 голосов
/ 23 апреля 2019

Судя по вашему описанию, PERL5LIB кажется хорошим решением.

Я не знаю, что вы подразумеваете под "PERL5LIB, проверяет модули в каталоге, но не рекурсивные ", но PERL5LIB - это переменная оболочки, обычно устанавливаемая в вашей оболочке.файлы конфигурации (хотя это также может быть сделано динамически) в список каталогов.Из Environment (perlrun) , PERL5LIB - это

Список каталогов, в которых нужно искать файлы библиотеки Perl, прежде чем искать в стандартной библиотеке и текущем каталоге.[...]

Таким образом, вы можете установить для него подходящий список каталогов, который охватывает все необходимое.

Убедитесь, что это среда переменная, используя export в [ba] sh

export PERL5LIB="/path/to/dir1:/other/path/dir2:$HOME/inhome/dir3"

, где есть кавычки, если в именах каталогов есть пробелы.Эта строка обычно вводится в файл ~/.bashrc

Или, используйте setenv, если в [t]csh, со следующей строкой добавьте к ~/.tcshrc

setenv PERL5LIB "/path/to/dir1:/other/path/dir2:$HOME/inhome/dir3" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...