Почему эта команда perl дает неожиданные результаты?

#bash #perl #environment-variables

Вопрос:

По-моему .bashrc , у меня есть

 eval "$(perl -I$HOME/util/perl5/lib/perl5 -Mlocal::lib)"; export PERL5LIB=$HOME/util/perl5:$PERL5LIB  

если после этого я сделаю

 env | grep PERL5LIB  

Я вижу

 PERL5LIB=/home/myUser/util/perl5:/home/myUser/perl5/lib/perl5:  

Почему второй путь неверен? Я бы ожидал, что

 /home/myUser/util/perl5/lib/perl5  

для добавления в PERL5LIB, а не

 /home/myUser/perl5/lib/perl5  

я что-то неправильно понимаю в переданной команде perl eval ? Вывод этой команды, выполняемой в командной строке (а не из .bashrc ), является

 $ perl -I$HOME/util/perl5/lib/perl5 -Mlocal::lib Attempting to create directory /home/myUser/perl5 $  

Комментарии:

1. Каков результат perl -I$HOME/util/perl5/lib/perl5 -Mlocal::lib ?

2. Единственное, к чему вы добавляете PERL5LIB , — это $HOME/util/perl5 Часть после этого-это то, что было раньше. Как вы думаете, почему он должен быть util в нем?

3. @Barмар, но прежде чем запустить эту строку, я сделаю unset PERL5LIB это просто для уверенности. Результат тот же самый

4. @pretzlstyle: Это не вывод команды, которую я просил.

5. @choroba похоже, что так оно и есть. По крайней мере, это все, что относится к stdout. Отредактировано еще раз

Ответ №1:

Если вы не скажете иначе, local::lib использует ~/perl5.

Изменить

 perl -I$HOME/util/perl5/lib/perl5 -Mlocal::lib  

Для

 perl -I$HOME/util/perl5/lib/perl5 -Mlocal::lib=$HOME/util/perl5  

Комментарии:

1. успех! Спасибо. Использование здесь странное. документ-I aregument не сообщает о местонахождении lib ? Хотя я вообще ничего не знаю о perl

2. Он сообщает perl , где искать модули, такие как local::lib. Это не имеет ничего общего с local::lib или где local::lib сообщит Perl для поиска «локальной библиотеки». например Если вы установите local::lib в каталог, который уже ищет Perl, perl -Mlocal::lib=$HOME/util/perl5 будет достаточно.