activate_local_cpan.sh

Pythonにvirtualenvというパッケージがあって、便利なので似たような仕組みでCPANを使えるようにしてみた。

virtualenvの説明は以下のリンク先を見てください(超手抜き)。

CPANのインストール方法については過去のエントリを参照のこと。

# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly

deactivate () {
    if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
        PATH="$_OLD_VIRTUAL_PATH"
        export PATH
        unset _OLD_VIRTUAL_PATH
    fi
    if [ -n "$_OLD_VIRTUAL_PS1" ] ; then
        PS1="$_OLD_VIRTUAL_PS1"
        export PS1
        unset _OLD_VIRTUAL_PS1
    fi
    if [ -n "$_OLD_VIRTUAL_PERL5LIB" ] ; then
        PERL5LIB="$_OLD_VIRTUAL_PERL5LIB"
        export PERL5LIB
        unset _OLD_VIRTUAL_PERL5LIB
    fi

    unset CPAN_ROOT
    if [ ! "$1" = "nondestructive" ] ; then
    # Self destruct!
        unset deactivate
    fi
}

# unset irrelavent variables
deactivate nondestructive

export CPAN_ROOT=/usr/local/CPAN

_OLD_VIRTUAL_PATH="$PATH"
PATH="${CPAN_ROOT}/bin:$PATH"
export PATH

_OLD_VIRTUAL_PS1="$PS1"
PS1="(cpan)$PS1"
export PS1

_OLD_VIRTUAL_PERL5LIB="$PERL5LIB"
for dir in /lib/perl5/site_perl /lib/perl5; do
	if [ -z "$PERL5LIB" ]; then
		export PERL5LIB=${CPAN_ROOT}${dir}
	elif [ -z `echo ":${PERL5LIB}:" | grep ":${CPAN_ROOT}${dir}:"` ]; then
		export PERL5LIB=${CPAN_ROOT}$dir:${PERL5LIB}
	fi
done
export PERL5LIB

# This should detect bash, which has a hash command that must
# be called to get it to forget past commands.  Without
# forgetting past commands the $PATH changes we made may not
# be respected
if [ -n "$BASH" ] ; then
    hash -r
fi