Home Tags Anciens articles Mon CV

Développer en perl avec perlbrew

Je suis développeur Python sur mon temps libre et parfois dans mon métier de devops, c’est vrai, mais j’aime également beaucoup le perl qui m’a sauvé la vie quelque fois au bureau comme en perso. C’est d’ailleurs mon premier amour et le langage avec lequel j’ai le plus d’expérience, puisque j’en code depuis maintenant 9 ans, en web ou en système.

Alors, non, perl n’est pas mort, de nouvelles versions (comme la 5.30.0) sortent régulièrement (ou pas). La communauté des développeurs Perl 5 est quant à elle encore très active, comme le démontre également le CPAN et son activité (nouveau modules ou modules mis à jour).

Et oui, perl avec un “p” minuscule car je parle là de Perl 5. Ouf, on peut commencer !

La théorie (qui est aussi de la pratique)

Perlbrew est un outil permettant d’installer une ou plusieurs versions de perl dans l’environnement utilisateur, sans nécessiter de privilèges.

Cela permet ensuite d’installer des modules dans cet environnement, et de développer dans de bonnes conditions sans polluer le reste du sytème avec de nombreuses installations de perl ou de modules.

L’installation se fait simplement par :

$ wget -O - https://install.perlbrew.pl | bash

Si vous préférez, vous pouvez utiliser le gestionnaire de paquet par défaut de votre OS:

$ sudo apt install perlbrew

Il faut ensuite l’initialiser.

$ perlbrew init

N’oubliez pas d’ajouter l’instruction suivante dans votre .bashrc ou dans votre .zshrc :

source ~/perl5/perlbrew/etc/bashrc

A ce moment, nous allons installer dans notre perlbrew l’outil cpanm dans notre brew :

$ perlbrew install-cpanm

cpanm permet d’installer des modules provenant du CPAN en toute simplicité, par exemple:

$ cpanm DBD::mysql

Nous allons maintenant choisir une version de perl à installer. Pour lister les versions disponibles, lancez la commande :

$ perlbrew available

   perl-5.31.0
   perl-5.30.0
   perl-5.28.2
   perl-5.28.1
   perl-5.28.0
   perl-5.26.3
   ...

Installez la version de votre choix via :

$ perlbrew install perl-5.30.0

Pour utiliser cette version de perl le temps de toute une session, lancez:

$ perlbrew use perl-5.30.0

Dès ce moment, lorsque vous installez un module via cpanm Mon::Module (installé plus haut, je vous avais dit que l’on y reviendrait), il sera installé dans le répertoire de perlbrew lié à cette version de perl, c’est à dire ~/perl5/perlbrew/perls/perl-5.30.0/, garantissant ainsi l’intégrité de votre système.

Il est à noter que pour que vos scripts perl utilisent ce perl plutôt que celui de votre OS, il faut utiliser le shebang suivant :

#!/usr/bin/env perl

Vous pouvez également utiliser perlbrew de façon ponctuelle, pour exécuter un seul script dans une version via :

$ perlberew exec 5.30.0 myscript.pl

Exemple complet et concret

Un exemple complet sur ma session pour finir, avec la version 5.28.2.

Je commence par charger mon perl, puis j’installe un module.

$ perlbrew use perl-5.28.2
$ cpanm Class::CSV
--> Working on Class::CSV
Fetching http://www.cpan.org/authors/id/D/DJ/DJR/Class-CSV-1.03.tar.gz ... OK
Configuring Class-CSV-1.03 ... OK
Building and testing Class-CSV-1.03 ... OK
Successfully installed Class-CSV-1.03
1 distribution installed

Mon module est bien installé dans mon perlbrew:

$ find /home/kharec/perl5/perlbrew | grep Class | grep CSV
/home/kharec/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/Class/CSV.pm
/home/kharec/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/x86_64-linux/auto/Class/CSV
/home/kharec/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/x86_64-linux/auto/Class/CSV/.packlist
/home/kharec/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/x86_64-linux/.meta/Class-CSV-1.03
/home/kharec/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/x86_64-linux/.meta/Class-CSV-1.03/install.json
/home/kharec/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/x86_64-linux/.meta/Class-CSV-1.03/MYMETA.json
/home/kharec/perl5/perlbrew/perls/perl-5.28.2/man/man3/Class::CSV.3

Je créé maintenant un script de test :

$ vim test.pl
$ cat test.pl
#!/usr/bin/env perl
use strict;
use warnings;

use Class::CSV;
print("OK, module Class::CSV loaded\n");
exit(0);

Preuve que je suis en perl 5.28.2 :

$ perl -v

This is perl 5, version 28, subversion 2 (v5.28.2) built for x86_64-linux
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2019, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Et pour finir, le test du script :

$ chmod +x test.pl
$ ./test.pl
OK, module Class::CSV loaded

Happy brewing !