[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

This is an old revision of the document!


Table of Contents

Perlbrew at ÚFAL

Perlbrew is a great tool for switching different versions of perl.
I've created a new shared ÚFAL repository of Perl modules using Perlbrew as a substitute of the old PERLREPO.

Martin Popel

How to setup the Perlbrew environment

Add to your ~.bashrc:

source /net/work/projects/perlbrew/init
eval "$(bash-complete setup)"

The second line is optional, but it enables Bash Completion for perlbrew, cpanm and treex (if the respective Bash::Completion::Plugins::XY modules are installed).
Make sure you have deleted (commented out) the old setup_platform setup (source /net/work/projects/perl_repo/admin/bin/setup_platform) from your ~/.bashrc.

Also note that perlbrew (unlike setup_platform) does not change your $PERL5LIB. You probably add some local Perl modules to $PERL5LIB in your .bashrc (e.g. export PERL5LIB=“/home/popel/tmt/treex/lib:$PERL5LIB”). When you source .bashrc again, make sure you don't have duplicate paths in $PERL5LIB (e.g. “/home/popel/tmt/treex/lib:/home/popel/tmt/treex/lib”) – to prevent this add this line to the beginning of your .bashrc:

export PERL5LIB=""

How to use Perlbrew

perlbrew list               # Which perl versions are installed?
perlbrew use perl-5.18.2    # use one of these perls for the current shell
perlbrew switch perl-5.18.2 # use this perl version permanently
perlbrew off                # return to the system installation of perl

You can read the full Perlbrew documentation (but it should not be needed).
Note that there is a separate Perlbrew environment for each architecture (32bit vs. 64bit machines) at ÚFAL, so if you switch to perl-5.18.2 on 32bit machines, you need to do it again on 64bit machines if you want to use perl-5.18.2 on both.

How to install missing modules from CPAN

If you see an error message such as Can't locate String/Diff.pm in @INC, it means the module String::Diff is not installed.
You can install it into the ÚFAL perlbrew repository, so it will be available also for others.
If you are used to cpan tool, you can use it, but I recommend using cpanm, which is faster.

cpanm String::Diff

This installs String::Diff for the current architecture (32bit vs. 64bit) and the currently selected Perl version.
If you want to install it for all Perl versions and the current architecture, use this trick

perlbrew exec cpanm String::Diff

If you did this on your machine (32bit), you still need to ssh to some 64bit machine (e.g. sol1) and install it there, if you want the module to be available from the LRC cluster.

Useful switch for cpanm is -n (notest, useful e.g. for cpanm -n Tk). See cpanm -h for more (e.g. installing from github, installing to your own local-lib).
You can install the modules also manually (perl Build.PL && ./Build && ./Build test && ./Build install). There is no need to set prefix nor install_base, because you (everyone from the group ufal) have write access to the shared ÚFAL perlbrew repository.

How to install new Perl version

perlbrew available                    # list perl versions available for download
perlbrew install perl-5.16.3          # install this older version
perlbrew install -Dcc=gcc --thread --multi -j 4 perl-5.20.0 # on Ubuntu10.04 64bit, I had to use -Dcc=gcc

(Note that when trying to compile threaded perl on cluster machines I had to ignore this error.)

Now, we probably want to install all modules from the current perl to the new perl:

perlbrew list-modules > list.txt
perlbrew switch perl-5.16.3
cpanm -n Tk # Tk tests are long and pop up many windows
cpanm -n UNIVERSAL::DOES PerlIO::Util # these modules have (reported) errors, but we need them as dependencies
cpanm < list.txt

Tricky modules

Algorithm::SVM

In bindings.h after #include <assert.h> add these two lines:

#include <cstdlib>
#include <string.h>

Algorithm::FuzzyCmeans

Delete use_test_base; from Makefile.PL.

ÚFAL modules unreleased on CPAN


[ Back to the navigation ] [ Back to the content ]