local::libs for Dist Development
Most of my distributions are on GitHub and built using Dist::Zilla. As the dependencies of each vary widely and I don’t want to muck up my workstation’s libraries, I set up a local::lib for each distribution’s development.
The App::local::lib::helper scripts make this really easy. As per the docs, I combine the helper with App::cpanminus (cpanm
) for all installation.
To bootstrap a new local::lib area, I wrote this simple shell script:
#!/bin/bash
# script named "new-ll"
if [ -z $1 ]
then
echo 'pass the distribution name, please'
exit
fi
echo "creating local::lib for $1 ..."
sleep 3
curl -L http://cpanmin.us/ | perl - --notest --quiet --local-lib \
~/perl5/$1 \
App::cpanminus \
Dist::Zilla \
App::local::lib::helper
.
Entering the correct environment for a distribution uses another helper script:
#!/bin/bash
# script named "go"
if [ -z $1 ]
then
echo 'pass the distribution name, please'
exit
fi
~/perl5/$1/bin/localenv bash
.
Which means my workflow for a new distribution is:
$ new-ll New-Dist-Name
$ go New-Dist-Name
.
Any Perl distributions installed in that shell (for example from dzil authordeps | cpanm
or dzil listdeps | cpanm
) will be placed into the new local::lib. It’s a simple ^D to exit.
However it’s not obvious that you’re within this special environment, so editing Bash’s $PS1
variable (the shell prompt) to include the following, can help:
echo $PERL5LIB | cut -d'/' -f5
.
My deep thanks to the authors of the distributions used to create this neat setup.
My good friend Ray has taken this concept and applied some additional tweaks - well worth checking out his scripts instead of mine:
https://github.com/ray1729/scripts/blob/master/new-profile
https://github.com/ray1729/scripts/blob/master/switch-profile