perl sous AIX

Creation: 19 avril 2013
Mise à jour:
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2013 Jean-Louis BICQUELET-SALAÜN

perl sous AIX

Perl est installé par défaut sous AIX. Cela présente l'énorme avantage en particulier pour l'administrateur système, de fournir un langage de script disponibles sur tous ses serveurs (contrairement à python que l'on doit installer à partir d'une vieille version de l'AIX TOOLBOX ou d'un téléchargement d'activestate). Malheureusement, le perl inclus dans AIX est assez restreint. Un petit tour d'horizon va nous permettre de mieux maîtriser perl sous AIX et de l'améliorer.

De quoi dispose-t-on?

Tous les modules de perl ne sont pas installés sous AIX.

Comment connaitre les modules perl installés ? Il existe plusieures manières de faire.

methode 1

On cherche dans le répertoire contenant les binaires perl l'executable instmodsh eton liste les modules installés.

# cd /usr/opt/perl5/bin
/usr/opt/perl5/bin # ./instmodsh -l
Available commands are:
  l            - List all installed modules
  m    - Select a module
  q            - Quit the program
cmd? l
Installed modules are:
  Crypt::SSLeay
  Digest
  HTML::Parser
  HTML::Tagset
  IO::Socket::INET6
  MIME::Base64
  Perl
  Socket6
  URI
  XML::LibXML
  XML::LibXML::Common
  XML::NamespaceSupport
  XML::Parser
  XML::SAX
  libwww-perl

Pour trouver l'emplacement de perl:

lslpp -f perl.rte | grep perl

methode 2

On va consulter dans la variable d'environnement @INC les chemins ou sont installés les modules et on chercheles modules(ceux-ci ont une extension .pm).
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $
                           if /\.pm\z/ }, no chdir => 1 }, @INC'

/usr/opt/perl5_64/lib/5.12.2/inc/latest.pm
/usr/opt/perl5_64/lib/5.12.2/inc/latest/private.pm
/usr/opt/perl5_64/lib/5.12.2/overload/numbers.pm
/usr/opt/perl5_64/lib/5.12.2/warnings/register.pm
Une autre manière de faire que je préfère et que je vous conseille, repose sur le même principe mais qui présente l'avantage de s'éloigner des contraintes d'installation:
perl -e 'while (<@INC>) { while (<$ /*.pm>) { print "$ \n"; } }'

methode 3

On utilise le module MExtUtils::Installed en ligne de commande. Celui-ci va lister tous les modules.

Soit avec la ligne de commande:

perl -MExtUtils::Installed -e '$inst = ExtUtils::Installed->new(); 
                           @modules = $inst->modules();  print join("\n", @modules);'

Archive::Tar
Archive::Zip
Font::TTF
IO::Compress
IO::Stringy
Mail::Sendmail
OLE::Storage_Lite
PDF::API2
Perl
Spreadsheet::WriteExcel

Soit avec celle-ci:

perl -MExtUtils::Installed -E 'say for ExtUtils::Installed->new()->modules()'

Archive::Tar
Archive::Zip
Font::TTF
IO::Compress
IO::Stringy
Mail::Sendmail
OLE::Storage_Lite
PDF::API2
Perl
Spreadsheet::WriteExcel
define

installation d'un module perl

Le plus simple est de télécharger les modules à partir du site CPAN. Vous pouvez aussi construire vous-même vos propres modules et les installer.

Il faut ensuite:

  • dézipper le module
    gunzip -c Date-Simple-3.03.tar.gz | tar xvf -
    
  • construire le module avec sont makefile. Ceci peut être fait avec n'importe quel compte utilisateur
    cd du module>perl Makefile.PL noxs
    make
    make test
    
  • installer le module dansl'arborescence perl. Il faut disposer de droits suffisant (en général root) pour l'installation.
    make install
    

trucs et astuces concernant les modules

Pour trouver le chemin vers un module vous pouvez utiliser perldoc.

perldoc -lm List::Util

Pour ajouter comment ajouter un repertoire personnel à la liste des modules tapez:

BEGIN { push @INC,'/home/jlb/perl/mes_modules'; }

Pour encapsuler du perl dans un script ksh (on est en AIX après tout):

#!/bin/ksh
perl_email() {
/usr/bin/perl << 'EOF'
use EmailClient;
my $obj = EmailClient-new;
my $email = $obj-getData( -field = 'email' );
print "$email";
EOF
}
SHELL EMAIL=$(perl email)

La variable SHELL_EMAIL va contenir le résultat de la commande. L'éxecution de la commande est lancée par $( ).