Perl не распознает модуль / путь к модулю для пользователя root

Я новичок в Perl, так что терпите меня. Спасибо за помощь.

У меня есть машина Ubuntu с Perl. Я следовал руководству по загрузке local::lib

Я использовал cpanm для установки DBI и других модулей в свою систему. Я обеспокоен тем, что в моей системе могут быть другие модули DBI, которые могут быть частью проблемы. Это результат find / -name 'DBI.pm' 2>/dev/null:

      /home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/Bundle/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/lib/Bundle/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Bundle/DBI.pm

Я добавил 2 строки в свой файл .bashrc. (Я добавил вторую строку, потому что я сломал что-то для пользователя без полномочий root, и это исправило; может быть, я что-то сломал с помощью local::lib?)

      eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
PERL5LIB="/home/ubuntu/perl5/lib/perl5"

Я могу запустить свой perl-скрипт как пользователь без полномочий root. Если я бегу с sudo perlScript.pl Я получаю такую ​​ошибку: Can't locate DBI.pm in @INC (you may need to install the DBI module)

Я уже какое-то время занимаюсь устранением неполадок @INC и не могу понять, как настроить его для пользователя root. Я пробовал разные вещи, включая добавление PERL5LIB в .profile и вызов моего скрипта следующим образом: sudo sh -c '. ~/.profile; perl ~/perlScripts/perlScript.pl "argForScript"' (Я подтвердил, что PERL5LIB устанавливается с sudo sh -c '. ~/.profile; echo $PERL5LIB')

Однако я всегда получаю сообщение об ошибке @INC. Самое очевидное, что я заметил, это сравнение sudo perl -V и perl -V. Вызов sudo не показывает никаких переменных ENV, а @INC не включает желаемое расположение PERL5LIB. Вызов не-sudo показывает желаемые переменные ENV и @INC.

Я рассматриваю возможность протирания данных и выполнения новой установки с привилегиями root для local::lib и cpan. Не совсем уверен, что еще попробовать на этом этапе.

1 ответ

Это команды, которые в итоге сработали для меня. Я испортил свою первую среду с помощью local::lib / non-sudo cpan install, поэтому я установил новую виртуальную машину.

      sudo apt install make
sudo apt install build-essential
sudo apt install libmysqlclient-dev
sudo cpan App::cpanminus
cpanm --sudo DBI
cpanm --sudo Array::Utils
cpanm --sudo DBD::mysql
Другие вопросы по тегам