Это возможно, но не удобно. Если это однопользовательская настройка, вам лучше не использовать local::lib
, а просто позволить perlbrew управлять модулями за вас. Кроме того, если это многопользовательская настройка в однородной сети, где у всех одинаковые машина и ОС, тогда вы можете просто установить PERLBREW_ROOT
, например, на. /net/share/perlbrew
и тогда ваши установленные perls (и их модули) могут быть предоставлены в общий доступ. Как отмечалось в других ответах, это будет проблемой, если вы попытаетесь смешать компьютеры (и, возможно, также проблематичным, если у вас разные операционные системы).
В очень разнородной сети мы предпочитаем держать все отдельно. Вы можете просто настроить свой local::lib
как функцию текущего Perl и текущей платформы, например,
distro=lsb_release -d|cut -f2|tr ' ' '-'
arch=`uname -m`
platform="$distro-$arch"
export PERLBREW_ROOT=/net/share/perlbrew/$platform
# You will have to first do 'perlbrew init' (just once for all users)
# In this case you don't need (and shouldn't have) a ~/.perlbrew
source $PERLBREW_ROOT/etc/bashrc
perl5base=/net/share/perl
# When $PERLBREW_PERL is not defined, local::lib puts modules in $perl5base/$platform
perl5=$perl5base/$platform/$PERLBREW_PERL
# We also found that we needed to clean PERL5LIB in between
export PERL5LIB=`echo -n $PERL5LIB|sed "s|${perl5base}[^:]*||g"`
export PATH=`echo -n $PATH|sed "s|${perl5base}[^:]*||g"`
# Setup local lib, relative to the perl being used
lib=$perl5/lib/perl5
mkdir -p $lib
eval $(perl -I"$lib" -Mlocal::lib="$perl5")
Это не наш точный сценарий, в частности, вам нужно проверить, что все эти каталоги существуют в первую очередь. Вам нужно запускать perlbrew init один раз для каждой платформы, и вам также нужно каждый раз запускать local :: lib.
Я не рекомендую этот подход, но приведу в качестве примера один из способов сделать эту работу, который он делает для нашей смешанной сети (даже в Mac OS). Оставив local :: lib и просто использовать perlbrew (игнорируя системный perl), это был бы более чистый подход.