gerer $PERL5LIB avec zsh
Je viens de lire ici ce code là:
BASE_PATH=~/code/work/rtgi
for perl_lib in $(ls $BASE_PATH); do
if [ -f $BASE_PATH/$perl_lib/Makefile.PL ]; then
PERL5LIB=${PERL5LIB:+$PERL5LIB:}$BASE_PATH/$perl_lib/lib
fi
done
export PERL5LIBc’est dommage de ne pas profiter de zsh quand on l’utilise. Transformons:
for perl_lib in $(ls $BASE_PATH); do done
- utilise une commande externe
- interprete la stdout de ls pour créer un tableau (epic fail en cas de nom de répertoire pourri)
je remplace par:
for perl_lib ( $BASE_PATH/* ) {
}(utilisant au passage la syntaxe alternative zsh tellement plus jolie)
ensuite …
if [ -f $BASE_PATH/$perl_lib/Makefile.PL ]; then
PERL5LIB=${PERL5LIB:+$PERL5LIB:}$BASE_PATH/$perl_lib/lib
fiverifie si y’a un Makefile.PL dans le repertoire. Du coup le mieux est de faire l’inverse: chercher tous les Makefile.PL dans les sous-repertoires (non-récursivement)
$BASE_PATH/*/Makefile.PL
puis ne conserver que le dirname ( :h comme head)
for perl_lib ( $BASE_PATH/*/Makefile.PL(:h) ) {
}reste ca:
PERL5LIB=${PERL5LIB:+$PERL5LIB:}$BASE_PATH/$perl_lib/libc’est pas beau mais comment faire avec une chaine ? ca serait tellement plus joli de gérer PERL5LIB avec un tableau pour pouvoir utiliser l’operateur += … et bien zsh permet de faire un tie d’un tableau sur une chaine grace a typeset -T chaine tableau. j’ajoute un U pour laisser a zsh le soin de virer tout doublon.
typeset -UT PERL5LIB perl5lib
maintenant je peux manipuler le tableau perl5lib
# push $PWD: perl5lib+=$PWD # unshift $PWD: perl5lib[1]=( $PWD $perl5lib[1] )
au final, l’expression ci-avant donne donc:
typeset -UT PERL5LIB perl5lib
for f ( $BASE_PATH/*/Makefile.PL(:h) ) { perl5lib+=$f/lib }enjoy
Related posts: