Install Perl no-standard directory

Tags: #<Tag:0x00007ff8e60b63c8>

Bonjour, bonsoir.

Je vous souhaite une superbe bonne année. Que tous nos projets les plus fous, ceux (que nous) réalis.e.ons se concrétisent :smiley: La bonne santé à toutes, et tous !

Bon sinon çà fait 3 jours que j’essaie d’installer « perl » dans un non-standard répertoire.

Je souhaitais installer/tester une installation de « perl » dans un répertoire Linux autre que celui par default.

  1. Premièrement pour ne pas casser le « perl » de la machine.

  2. Deuxièmement pour tester l’installation depuis la dernière version de « perl ».

  3. Troisièmement pour apprendre « perl » et pouvoir faire ce que je veux dans les répertoires, tester les modules, apprendre le « perl » (je ne connais pas, ou très furtivement ce langage, le « perl »).

En plus de pouvoir être un langage Web (CGI.pm), il peut travailler avec la machine (je ne sais pas trop expliquer) ou avec des « composants » externes grâce aux sockets ou interaction en dehors du protocole Web (HTTP/HTTPS).

C’est, donc, un language que j’aimerai connaitre, le « perl ».

J’ai, donc, installé un environnement « perl » dans le répertoire de ma « homedirectory ».

Je vous explique où j’en suis, et comment j’ai fais pour installer « perl » dans mon répertoire personnel → certes c’est sûrement pas le meilleur tutoriel mais pour l’instant j’arrive à lancer des scripts depuis mon environnement personnel et en mon utilisateur.

J’ai installé la dernière version « stable », la perl-5.36.0.

Je tourne sur une distribution Linux Debian 11 (bullseye) (noyau d’installation, le 5.10.0-19) où j’ai installé le noyau Linux (une version 6.0.9) que j’ai récupérais depuis kernel.org - Pour l’instant tout va bien - C’est un VPS d’OVH (4,10 € /mois TTC) loué pour faire des essaies de l’« actualité Linux ».

/!\ Je ne suis pas « administrateur système » de profession (plutôt développeur Web et passionné de bons réseaux) et d’autres peuvent vous aider (ainsi que moi) et tout les jours sur ce langage entre autre. Je préfère écrire ce « papier » / discussion pour que des professionnel.les puissent m’aider et vous aider si vous souhaitez essayer ce language, le « perl ».

WikipediA : Perl est un langage de programmation créé par Larry Wall en 1987 pour traiter facilement de l’information de type textuel. Ce langage, interprété, s’inspire des structures de contrôle et d’impression du langage C, mais aussi de langages de scripts sed, awk et et shell (sh).

J’écris cette méthode pour installer « perl » dans son répertoire personnel Linux.

Je vous lie les documentions Web qui m’ont aidés :

Perl Source - www.cpan.org
INSTALL - Build and Installation guide for perl 5. - metacpan.org
local::lib - create and use a local lib/ for perl modules with PERL5LIB
FindBin - Locate directory of original perl script - metacpan.org

Others :
Installation into a Nonstandard Directory (Practical mod_perl)
Install and manage Perl modules in your home directory on Carbonate

Vous pouvez installer « perl » sous Windows. Sur MacOS il est déjà installé (peut-être que ce « sujet » peut vous intéresser aussi, si vous souhaitez installer « perl » dans votre répertoire perso).

FAQ Perl * Comment installer Perl ?

IDE ( Integrated Development Environment) : EPIC (Eclipse Perl Integration) - How To Install

Lien complémentaire :

Installation des modules Perl CPAN (Comprehensive Perl Archive Network) sous Windows, Linux et MacOS

Perl Examples 1997 of Matthew Lewis

guru99.comPerl Tutorial: Variable, Array, Hashes with Programming Example : The tutorial is specially designed to help them who has little or no knowledge on Perl

Linuxtricks.frPERL : Mémo pour scripter - Wiki : Introduction Je script, je script, mais parfois, j’ai un sacré trou de mémoire … et je galère à trouver ce que je cherche sur…


Bon rentrons dans le sujet :

1èrement j’ai vérifié la version de mon environnement :

root@vps:/home/orj # perl -v

This is perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux-gnu-thread-multi
(with 47 registered patches, see perl -V for more detail)

Copyright 1987-2021, Larry Wall....

J’ai, donc la version de 5.32.1.

Puis j’ai vérifié l’environnement :

root@vps:/home/orj # perl -V
Summary of my perl5 (revision 5 version 32 subversion 1) configuration:

  Platform:
    osname=linux
    osvers=4.19.0
    archname=x86_64-linux-gnu-thread-multi
    uname='linux localhost 4.19.0 #1 smp debian 4.19.0 x86_64 gnulinux '
    config_args='-Dmksymlinks -Dusethreads -Duselargefiles -Dcc=x86_64-linux-gnu-gcc -Dcpp=x86_64-linux-gnu-cpp -Dld=x86_64-linux-gnu-gcc -Dccflags=-DDEBIAN -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -ffile-prefix-map=/dummy/build/dir=. -fstack-protector-strong -Wformat -Werror=format-security -Dldflags= -Wl,-z,relro -Dlddlflags=-shared -Wl,-z,relro -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.32 -Darchlib=/usr/lib/x86_64-linux-gnu/perl/5.32 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/x86_64-linux-gnu/perl5/5.32 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.32.1 -Dsitearch=/usr/local/lib/x86_64-linux-gnu/perl/5.32.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -Ui_xlocale -Uversiononly -DDEBUGGING=-g -Doptimize=-O2 -dEs -Duseshrplib -Dlibperl=libperl.so.5.32.1'
    hint=recommended
    useposix=true
    d_sigaction=define
    useithreads=define
    usemultiplicity=define
    use64bitint=define
    use64bitall=define
    uselongdouble=undef
    usemymalloc=n
    default_inc_excludes_dot=define
    bincompat5005=undef
  Compiler:
    cc='x86_64-linux-gnu-gcc'
    ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
    optimize='-O2 -g'
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include'
    ccversion=''
    gccversion='10.2.1 20210110'
    gccosandvers=''
    intsize=4
    longsize=8
    ptrsize=8
    doublesize=8
    byteorder=12345678
    doublekind=3
    d_longlong=define
    longlongsize=8
    d_longdbl=define
    longdblsize=16
    longdblkind=3
    ivtype='long'
    ivsize=8
    nvtype='double'
    nvsize=8
    Off_t='off_t'
    lseeksize=8
    alignbytes=8
    prototype=define
  Linker and Libraries:
    ld='x86_64-linux-gnu-gcc'
    ldflags =' -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/local/lib /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=libc-2.31.so
    so=so
    useshrplib=true
    libperl=libperl.so.5.32
    gnulibc_version='2.31'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs
    dlext=so
    d_dlsymun=undef
    ccdlflags='-Wl,-E'
    cccdlflags='-fPIC'
    lddlflags='-shared -L/usr/local/lib -fstack-protector-strong'


Characteristics of this binary (from libperl):
  Compile-time options:
    HAS_TIMES
    MULTIPLICITY
    PERLIO_LAYERS
    PERL_COPY_ON_WRITE
    PERL_DONT_CREATE_GVSV
    PERL_IMPLICIT_CONTEXT
    PERL_MALLOC_WRAP
    PERL_OP_PARENT
    PERL_PRESERVE_IVUV
    USE_64_BIT_ALL
    USE_64_BIT_INT
    USE_ITHREADS
    USE_LARGE_FILES
    USE_LOCALE
    USE_LOCALE_COLLATE
    USE_LOCALE_CTYPE
    USE_LOCALE_NUMERIC
    USE_LOCALE_TIME
    USE_PERLIO
    USE_PERL_ATOF
    USE_REENTRANT_API
    USE_THREAD_SAFE_LOCALE
  Locally applied patches:
    DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN.
    [.......]
    DEBPKG:fixes/regcomp-memleak - https://bugs.debian.org/994834 [GH #18604] [5f41fa4] regcomp.c: Remove memory leak
  Built under linux
  Compiled at Sep 24 2021 16:10:58
@INC:
    /etc/perl
    /usr/local/lib/x86_64-linux-gnu/perl/5.32.1
    /usr/local/share/perl/5.32.1
    /usr/lib/x86_64-linux-gnu/perl5/5.32
    /usr/share/perl5
    /usr/lib/x86_64-linux-gnu/perl-base
    /usr/lib/x86_64-linux-gnu/perl/5.32
    /usr/share/perl/5.32
    /usr/local/lib/site_perl

j’ai lu sur la page INSTALL - Build and Installation guide for perl 5, la commande perl -V:config_args qui m’a permis de l’envoyer par rapport à ma configuration personnelle/souhaitée.

root@vps:/home/orj/perl-5.36.0 # perl -V:config_args
config_args='-Dmksymlinks -Dusethreads -Duselargefiles -Dcc=x86_64-linux-gnu-gcc -Dcpp=x86_64-linux-gnu-cpp -Dld=x86_64-linux-gnu-gcc -Dccflags=-DDEBIAN -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -ffile-prefix-map=/dummy/build/dir=. -fstack-protector-strong -Wformat -Werror=format-security -Dldflags= -Wl,-z,relro -Dlddlflags=-shared -Wl,-z,relro -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.32 -Darchlib=/usr/lib/x86_64-linux-gnu/perl/5.32 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/x86_64-linux-gnu/perl5/5.32 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.32.1 -Dsitearch=/usr/local/lib/x86_64-linux-gnu/perl/5.32.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -Ui_xlocale -Uversiononly -DDEBUGGING=-g -Doptimize=-O2 -dEs -Duseshrplib -Dlibperl=libperl.so.5.32.1';

Entre parenthèse : je ne trouvais pas le Makefile.PL dans la racine du tar.gz téléchargé → il y a un fichier Configure (SH) qui permet de configurer notre installation personnalisée.

J’ai téléchargé et décompréssé l’archive tar.gz sur le site de perl (et attribué les droits à mon utilisateur « orj ») :

orj@vps:~ # wget https://www.cpan.org/src/5.0/perl-5.36.0.tar.gz
orj@vps:~ # tar xzvfp perl-5.36.0.tar.gz
orj@vps:~ # sudo chown orj.lab3w perl-5.36.0 -R

Donc, dans mon répertoire personnel, j’ai créais un dossier « myperl5 » pour y placer « perl ».

orj@vps:~ # mkdir myperl5
orj@vps:~ # mkdir myperl5/common/
orj@vps:~ # mkdir myperl5/common/bin/
orj@vps:~ # mkdir myperl5/common/lib/
orj@vps:~ # mkdir myperl5/share/

Je retourne dans le répertoire des sources de « perl-5.36.0 » puis j’envoie la configuration adaptée à mon répertoire personnel :

orj@vps:~ # cd perl-5.36.0

J’hésite entre configurer x86_64-linux-gnu ou x86_64-linux-gnu-thread-multi :

  • Différence entre le résultat de la commande perl -V:config_args -> -Darchname=x86_64-linux-gnu
  • et le retour de la commande perl -V qui me retourn Plateform -> archname=x86_64-linux-gnu-thread-multi

Donc, je configure la demande d’installation de « perl » dans un répertoire non-standard → mon répertoire personnel :

orj@vps:~/perl-5.36.0 # sh Configure \ 
-Dusethreads \ 
-Dcc=x86_64-linux-gnu-gcc \
-Dcpp=x86_64-linux-gnu-cpp \
-Dld=x86_64-linux-gnu-gcc \
-Dccflags=-DDEBIAN 
-Darchname=x86_64-linux-gnu \
-Dprefix=/home/orj/myperl5/ \
-Dscript=/home/orj/myperl5/common/bin \
-Dprivlib=/home/orj/myperl5/common/lib/perl/5.36 \
-Darchlib=/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36 \
-Dvendorprefix=/home/orj/myperl5/ \
-Dvendorlib=/home/orj/myperl5/common/lib/perl5 \
-Dvendorarch=/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5/5.36 \
-Dsiteprefix=/home/orj/myperl5/ \
-Dsitelib=/home/orj/myperl5/common/share/perl/5.36.0 \
-Dsitearch=/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0

J’y suis arrivé comme cela - Peut-être qu’il a des « meilleures » options à ajouter.

J’ai validé « entrer » sur les options par default « vais-je dire » → sauf celles qui récupérées les réperoires « standards » ou qui touchées à « perl » du système.
Je n’ai pas ajouté de modules « extra » - sinon il me manquait des dépendances.

Ensuite, donc, envoyer les commandes suivantes :

orj@vps:~/perl-5.36.0 # make
orj@vps:~/perl-5.36.0 # make test
orj@vps:~/perl-5.36.0 # make install

Je me retrouve avec les répertoires suivant :

orj@vps:~ # ls -l myperl5/
total 8
drwxr-xr-x 6 orj lab3w 4096 Jan  3 16:26 common
drwxr-xr-x 2 orj lab3w 4096 Jan  3 16:26 share

orj@vps:~ # ls -l myperl5/common/
total 16
drwxr-xr-x 2 orj lab3w 4096 Jan  3 16:26 bin
drwxr-xr-x 4 orj lab3w 4096 Jan  3 16:26 lib
drwxr-xr-x 4 orj lab3w 4096 Jan  3 16:27 man
drwxr-xr-x 3 orj lab3w 4096 Jan  3 16:26 share

orj@vps:~ # ls myperl5/common/bin/
perl        perl5.36.0

orj@vps:~ # ls -l myperl5/common/bin/perl
-rwxr-xr-x 2 orj lab3w 3951072 Jan  3 16:26 myperl5/common/bin/perl

orj@vps:~ # ls -l myperl5/common/lib/perl/5.36/
total 1776
[........]
drwxr-xr-x 10 orj lab3w   4096 Jan  3 16:26 CPAN
-r--r--r--  1 orj lab3w 147862 Jan  3 16:26 CPAN.pm
[........]
-r--r--r--  1 orj lab3w  55916 Jan  3 16:26 warnings.pm

orj@vps:~/myperl5 # ls -l myperl5/share/
total 532
-rwxr-xr-x 1 orj lab3w 15393 Jan  3 16:26 corelist
-rwxr-xr-x 1 orj lab3w  8378 Jan  3 16:26 cpan
-rwxr-xr-x 1 orj lab3w 41898 Jan  3 16:26 enc2xs
-rwxr-xr-x 1 orj lab3w  3087 Jan  3 16:26 encguess
-rwxr-xr-x 1 orj lab3w 29245 Jan  3 16:26 h2ph
-rwxr-xr-x 1 orj lab3w 60952 Jan  3 16:26 h2xs
-rwxr-xr-x 1 orj lab3w  4308 Jan  3 16:26 instmodsh
-rwxr-xr-x 1 orj lab3w  5010 Jan  3 16:26 json_pp
-rwxr-xr-x 1 orj lab3w 15796 Jan  3 16:26 libnetcfg
-rwxr-xr-x 2 orj lab3w 45197 Jan  3 16:26 perlbug
-rwxr-xr-x 1 orj lab3w   280 Jan  3 16:26 perldoc
-rwxr-xr-x 1 orj lab3w 10843 Jan  3 16:26 perlivp
-rwxr-xr-x 2 orj lab3w 45197 Jan  3 16:26 perlthanks
-rwxr-xr-x 1 orj lab3w  8378 Jan  3 16:26 piconv
-rwxr-xr-x 1 orj lab3w  4554 Jan  3 16:26 pl2pm
-rwxr-xr-x 1 orj lab3w  4155 Jan  3 16:26 pod2html
-rwxr-xr-x 1 orj lab3w 15052 Jan  3 16:26 pod2man
-rwxr-xr-x 1 orj lab3w 10821 Jan  3 16:26 pod2text
-rwxr-xr-x 1 orj lab3w  4116 Jan  3 16:26 pod2usage
-rwxr-xr-x 1 orj lab3w  3667 Jan  3 16:26 podchecker
-rwxr-xr-x 1 orj lab3w 13677 Jan  3 16:26 prove
-rwxr-xr-x 1 orj lab3w  3584 Jan  3 16:26 ptar
-rwxr-xr-x 1 orj lab3w  2663 Jan  3 16:26 ptardiff
-rwxr-xr-x 1 orj lab3w  4413 Jan  3 16:26 ptargrep
-rwxr-xr-x 1 orj lab3w  9997 Jan  3 16:26 shasum
-rwxr-xr-x 1 orj lab3w 19467 Jan  3 16:26 splain
-rwxr-xr-x 1 orj lab3w  7959 Jan  3 16:26 streamzip
-rwxr-xr-x 1 orj lab3w  5185 Jan  3 16:26 xsubpp
-rwxr-xr-x 1 orj lab3w 70211 Jan  3 16:26 zipdetails

J’ai dû recharger mon fichier .bashrc ou me déconnecter et me re-identifier.

orj@vps:~/myperl5 # source /home/orj/.bashrc

Mes variables « ajoutées » à .bashrc sont celles-ci :

# après plusieurs test d'intallation
#PATH="/home/orj/perl5/bin${PATH:+:${PATH}}"; export PATH;
#PERL5LIB="/home/orj/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
#PERL_LOCAL_LIB_ROOT="/home/orj/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
#PERL_MB_OPT="--install_base \"/home/orj/perl5\""; export PERL_MB_OPT;
#PERL_MM_OPT="INSTALL_BASE=/home/orj/perl5"; export PERL_MM_OPT;

# J'ai configuré comme cela
#eval `/usr/bin/perl -V:archname`
PATH="/home/orj/myperl5/common/bin${PATH:+:${PATH}}"; export PATH;
#PERL5LIB="/home/orj/myperl5/common/lib/perl/$archname:/home/orj/myperl5/common/lib/perl/5.36${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL5LIB="/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36:/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0:/home/orj/myperl5/common/lib/perl/5.36${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERLLIB=$PERL5LIB; export PERLLIB;
#PERL_LOCAL_LIB_ROOT="/home/orj/myperl5/common/lib/perl/$archname:/home/orj/myperl5/common/lib/perl/5.36${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_LOCAL_LIB_ROOT=$PERL5LIB; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/orj/myperl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/orj/myperl5"; export PERL_MM_OPT;

Qui me retourne le résultat de la commande « /home/orj/myperl5/common/bin/perl -V »

orj@vps:~ # perl -V
Summary of my perl5 (revision 5 version 36 subversion 0) configuration:

  Platform:
    osname=linux
    osvers=6.0.9-ninja
    archname=x86_64-linux-gnu-thread-multi
    uname='linux vps 6.0.9-ninja #2 smp preempt_dynamic thu dec 15 19:58:40 utc 2022 x86_64 gnulinux '
    config_args='-Dusethreads -Dcc=x86_64-linux-gnu-gcc -Dcpp=x86_64-linux-gnu-cpp -Dld=x86_64-linux-gnu-gcc -Dccflags=-DDEBIAN -Darchname=x86_64-linux-gnu -Dprefix=/home/orj/myperl5/ -Dscript=/home/orj/myperl5/common/bin -Dprivlib=/home/orj/myperl5/common/lib/perl/5.36 -Darchlib=/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36 -Dvendorprefix=/home/orj/myperl5/ -Dvendorlib=/home/orj/myperl5/common/lib/perl5 -Dvendorarch=/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5/5.36 -Dsiteprefix=/home/orj/myperl5/ -Dsitelib=/home/orj/myperl5/common/share/perl/5.36.0 -Dsitearch=/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0'
    hint=previous
    useposix=true
    d_sigaction=define
    useithreads=define
    usemultiplicity=define
    use64bitint=define
    use64bitall=define
    uselongdouble=undef
    usemymalloc=n
    default_inc_excludes_dot=define
  Compiler:
    cc='x86_64-linux-gnu-gcc'
    ccflags ='-DDEBIAN -fwrapv -D_FORTIFY_SOURCE=2'
    optimize='-O2'
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
    ccversion=''
    gccversion='10.2.1 20210110'
    gccosandvers=''
    intsize=4
    longsize=8
    ptrsize=8
    doublesize=8
    byteorder=12345678
    doublekind=3
    d_longlong=define
    longlongsize=8
    d_longdbl=define
    longdblsize=16
    longdblkind=3
    ivtype='long'
    ivsize=8
    nvtype='double'
    nvsize=8
    Off_t='off_t'
    lseeksize=8
    alignbytes=8
    prototype=define
  Linker and Libraries:
    ld='x86_64-linux-gnu-gcc'
    ldflags =' -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib /usr/lib64
    libs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    libc=libc-2.31.so
    so=so
    useshrplib=false
    libperl=libperl.a
    gnulibc_version='2.31'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs
    dlext=so
    d_dlsymun=undef
    ccdlflags='-Wl,-E'
    cccdlflags='-fPIC'
    lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong'


Characteristics of this binary (from libperl):
  Compile-time options:
    HAS_TIMES
    MULTIPLICITY
    PERLIO_LAYERS
    PERL_COPY_ON_WRITE
    PERL_DONT_CREATE_GVSV
    PERL_MALLOC_WRAP
    PERL_OP_PARENT
    PERL_PRESERVE_IVUV
    USE_64_BIT_ALL
    USE_64_BIT_INT
    USE_ITHREADS
    USE_LARGE_FILES
    USE_LOCALE
    USE_LOCALE_COLLATE
    USE_LOCALE_CTYPE
    USE_LOCALE_NUMERIC
    USE_LOCALE_TIME
    USE_PERLIO
    USE_PERL_ATOF
    USE_REENTRANT_API
    USE_THREAD_SAFE_LOCALE
  Built under linux
  Compiled at Jan  3 2023 15:58:34
  %ENV:
    PERL5LIB="/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36:/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0:/home/orj/myperl5/common/lib/perl/5.36"
    PERLLIB="/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36:/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0:/home/orj/myperl5/common/lib/perl/5.36"
    PERL_LOCAL_LIB_ROOT="/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36:/home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0:/home/orj/myperl5/common/lib/perl/5.36"
    PERL_MB_OPT="--install_base "/home/orj/myperl5""
    PERL_MM_OPT="INSTALL_BASE=/home/orj/myperl5"
  @INC:
    /home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36
    /home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0
    /home/orj/myperl5/common/lib/perl/5.36
    /home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5.36.0
    /home/orj/myperl5/common/share/perl/5.36.0
    /home/orj/myperl5/common/lib/x86_64-linux-gnu/perl5/5.36
    /home/orj/myperl5/common/lib/perl5
    /home/orj/myperl5/common/lib/x86_64-linux-gnu/perl/5.36
    /home/orj/myperl5/common/lib/perl/5.36

Et la commande « perl -v » (/home/orj/myperl5/common/bin/perl) depuis mon utilisateur « orj » :

orj@vps:~ # perl -v

This is perl 5, version 36, subversion 0 (v5.36.0) built for x86_64-linux-gnu-thread-multi

Copyright 1987-2022, Larry Wall
[...]

Puis j’ai testé un script perso « perl » :

orj@vps:~/myperl5 # mkdir myscripts
orj@vps:~/myperl5 # vim myscripts/helloworld.pl
use strict;
use warnings;

use FindBin;
use File::Spec;

print "\n//--------------------------------------------\n\n";

my $firstname = "ORJ";

print "Hello World, my name is $firstname !\n";
print "Hello World, my name is ${firstname} !\n";
print 'Hello World, my name is '.$firstname.' !'."\n";
print "Hello World, my name is ".$firstname." !\n";

print "\n//--------------------------------------------\n\n";

print "Le répertoire de mon script est : " . ${FindBin::Bin} . "\n";
print "Le nom de base de mon script est : " . $FindBin::Script . "\n";
print "L'emplacement canonique de mon script est : " . File::Spec->catfile($FindBin::Bin, $FindBin::Script) . "\n";

print "\n//--------------------------------------------\n\n";

Qui me retourne → Whouha :slight_smile:

orj@vps:~/myperl5 # perl myscripts/helloworld.pl

//--------------------------------------------

Hello World, my name is ORJ !
Hello World, my name is ORJ !
Hello World, my name is ORJ !
Hello World, my name is ORJ !

//--------------------------------------------

Le répertoire de mon script est : /home/orj/myperl5/myscripts
Le nom de base de mon script est : helloworld.pl
L'emplacement canonique de mon script est : /home/orj/myperl5/myscripts/helloworld.pl

//--------------------------------------------

Sinon à titre d’information :
L’installation m’a créait un répertoire .cpan dans ma « homedirectory ».

orj@vps:~ # ls -l .cpan/
total 40728
drwxr-xr-x  2 orj lab3w     4096 Jan  3 16:40 CPAN
-rw-r--r--  1 orj lab3w 41685103 Jan  3 15:35 Metadata
drwxr-xr-x 31 orj lab3w     4096 Jan  3 15:39 build
drwxr-xr-x  2 orj lab3w     4096 Jan  3 15:36 prefs
drwxr-xr-x  4 orj lab3w     4096 Jan  3 15:35 sources

J’ai mon fichier « personnel » de configuration :

orj@vps:~ # cat .cpan/CPAN/MyConfig.pm

$CPAN::Config = {
  'allow_installing_module_downgrades' => q[ask/no],
  'allow_installing_outdated_dists' => q[ask/no],
  'applypatch' => q[],
  'auto_commit' => q[0],
  'build_cache' => q[100],
  'build_dir' => q[/home/orj/.cpan/build],
  'build_dir_reuse' => q[0],
  'build_requires_install_policy' => q[yes],
  'bzip2' => q[/usr/bin/bzip2],
  'cache_metadata' => q[1],
  'check_sigs' => q[0],
  'cleanup_after_install' => q[0],
  'commandnumber_in_prompt' => q[1],
  'connect_to_internet_ok' => q[1],
  'cpan_home' => q[/home/orj/.cpan],
  'ftp_passive' => q[1],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[/usr/bin/gpg],
  'gzip' => q[/usr/bin/gzip],
  'halt_on_failure' => q[0],
  'histfile' => q[/home/orj/.cpan/histfile],
  'histsize' => q[100],
  'http_proxy' => q[],
  'inactivity_timeout' => q[0],
  'index_expire' => q[1],
  'inhibit_startup_message' => q[0],
  'keep_source_where' => q[/home/orj/.cpan/sources],
  'load_module_verbosity' => q[none],
  'make' => q[/usr/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'make_install_make_command' => q[/usr/bin/make],
  'makepl_arg' => q[],
  'mbuild_arg' => q[],
  'mbuild_install_arg' => q[],
  'mbuild_install_build_command' => q[./Build],
  'mbuildpl_arg' => q[],
  'no_proxy' => q[],
  'pager' => q[/usr/bin/less],
  'patch' => q[/usr/bin/patch],
  'perl5lib_verbosity' => q[none],
  'plugin_list' => [],
  'prefer_external_tar' => q[1],
  'prefer_installer' => q[MB],
  'prefs_dir' => q[/home/orj/.cpan/prefs],
  'prerequisites_policy' => q[follow],
  'pushy_https' => q[1],
  'recommends_policy' => q[1],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/bash],
  'show_unparsable_versions' => q[0],
  'show_upload_date' => q[0],
  'show_zero_versions' => q[0],
  'suggests_policy' => q[0],
  'tar' => q[/usr/bin/tar],
  'tar_verbosity' => q[none],
  'term_is_latin' => q[1],
  'term_ornaments' => q[1],
  'test_report' => q[0],
  'trust_test_report_history' => q[0],
  'unzip' => q[/usr/bin/unzip],
  'urllist' => [q[https://cpan.org/]],
  'use_prompt_default' => q[0],
  'use_sqlite' => q[0],
  'version_timeout' => q[15],
  'wget' => q[/usr/bin/wget],
  'yaml_load_code' => q[0],
  'yaml_module' => q[YAML],
};
1;
__END__

Je n’ai pas encore « essayer » d’installer d’autres modules à mon répertoire.


Comme je le disais, j’ai écris ce papier pour « manque d’informations FRançaise » sur ce language - Installation / programation etc :wink:

Je vous ajoute le manuel, la Documentation Perl en français - Chaque document est disponible au format POD (original), HTML, PDF et *ROFF (man). L’ensemble de cette documentation existe maintenant sous la forme d’un module Perl. Il s’appelle POD2::FR et il est disponible sur CPAN :smiley:

Merci pour votre compréhension et pour votre participation :roll_eyes:


Pour celles et ceux qui auraient réussis à suivre c’est pour pouvoir installer Mail::Dmarc à SpamAssassin de Zimbra → SpamAssassin - DMARC Filter + Email Reporting entre autres :wink:

À demain :slight_smile:

Bonne soirée.

Romain

Salut,
pour apprendre Perl pas besoin d’avoir une installation dans un autre répertoire que ce qui est prévu pour le package.
ce que tu développes ne va pas dans les répertoires du langage.

Coté CPAN, il te suffit d’avoir un user de développement, qui aura SON .cpan
Ton user usuel lui ne sera pas touché par ce que tu auras fait avec l’autre user.

perl est un langage important dans debian, et dans linux en général, donc faire joujou avec les installation, c’est une très mauvaise idée.

Pour le noyau 6.0, suffit de prendre les backports, pas besoin d’aller sur kernel.org. perso j’ai le 6.0.12 ainsi.

perl 5.36 n’apporte pas de chose vis à vis de la 5.32 qui te soit nécessaire pour apprendre; vouloir à tout prix la 5.36 pour apprendre est une perte de temps et risque de plus de te poser des problèmes non négligeables.

Pour faire plus tard un clean des modules installés, ton .cpan te permettra de le faire facilement.

Salut.

Bonne année. Merci pour ce commentaire.

Ok, oui, je « savais » que mes scripts ne pourrait pas endommager le language du system. Merci.

Oui, j’ai compris cela dans ces 3 jours.

D’accord.

C’est justement, pour moi, l’importance :wink:

Oui, merci, d’accord, bien sûr. Merci.

C’était avant tout pour « revoir » mes bases Linux, les principes, ce que cela générer, les fichiers « version debian », les diff, l’libc, le principe de upstream. Enfin de mieux connaître.

Oui, çà je ne sais pas trop. J’ai installé la dernière version « stable ».
Comme je le souligné, c’est parce que j’essaie d’installer des modules « perl » dans un répertoire no-standard, mais je ne sais pas encore comment-faire.

D’accord… Faire un « clean des modules installés » ; pour quelle raison ?

Merci.

Si tu as mis des librairies qu’ensuite tu n’as plus besoin ou que tu ne comptes plus utiliser.

1 J'aime

J’ai remarqué que je peut appeller des $variables avec des simples quotes.

Par contre je ne crois pas que cela fonctionne avec les modules ?

Par exemple, cette ligne fonctionne :

Et celle-ci ne fonctionne pas :

print 'L\'emplacement canonique de mon script est : ' . File::Spec->catfile($FindBin::Bin, $FindBin::Script) . ' . "\n";`

À priori ce n’est pas possible d’appeler un module::subroutine avec des simples quotes !? N’est-ce pas ?

Merci.

Romain


PS : En passant j’ai « installé perl » sur mon WIndows en version portable Strawberry Perl for Windows - Releases - c’est toujours bien aussi :smiley:

J’ai ajouté « EPIC » (Eclipse Perl Integration) à Eclipse : Menu → Help → Install new Software : Ajouter l’adresse : http://www.epic-ide.org/updates

Note de Moi-même : Dans Windows, pour configurer, par exemple la variable PATH, c’est ici :

Panneau de config → System et Security → Système → Paramètres système avancés → variables d’environnement → Variables système → Path → Modifier

Et ajouter les répertoires /bin de « perl ».

Par exemple :

C:\perl\strawberry-perl-5.32.1.1-32bit-portable\perl\site\bin
C:\perl\strawberry-perl-5.32.1.1-32bit-portable\perl\bin
C:\perl\strawberry-perl-5.32.1.1-32bit-portable\c\bin

La bise, bonne soirée.

les simples quotes impliquent l’interprétation de ce qu’il y a dedans, les doubles quotes prennent le contenu directement sans l’interpréter.

Oui, je sais çà, mais en retournant / sortant de l’interprétation de la fonction `print\ je croyais que cela fonctionnerait.

my $name = "romain";
print 'salut c\'est '.$name.' -> Systaxe perl différente de php'."\n";

çà, çà fonctionne mais pas en appelant une function/méhode/sub_routine - dirait-on.

J’aime bien écrire comme cela - çà permet de bien identifié visuellement les variables qui se retrouvent en couleurs dans mon éditeur.

Et avec un USE ? par exemple pour un module math :

use Math::Trig;

c’est la forme normale d’appel, qu’il vaut mieux utiliser.

Mieux vaut eviter de programmer en perl comme en php. Ca fait perdre tout l’interet du perl.

OUI, messieurs.

J’essaie d’installer des modules dans un autre répertoire mais çà ne fonctionne pas.

Certes « perl » arrive bien à installer dans mon répertoire personnel. Mais il me met les trucs où il veut.

Quand je fais un cpan> install un::Module

Il me créait un dossier /bin et un autre /lib « en dehors de la configuration initiale » → de celle-ci :

sh Configure [...] -Dprefix=/home/orj/myperl5/ -Dscript=/home/orj/myperl5/common/bin -Dprivlib=/home/orj/myperl5/common/lib/perl/5.36 [...]

Donc j’ai, vais-je dire 2 dossiers :

/home/orj/myperl5/common/bin/
/home/orj/myperl5/common/lib/perl/5.36/

Et lui quand j’installe un nouveau module il me met çà direct dans le dossier /home/orj/myperl5

/home/orj/myperl5/bin/
/home/orj/myperl5/lib/perl5/

Avec la configuration de « .cpan/CPAN/MyConfig.pm » par default :

$CPAN::Config = {
  [...]
  'makepl_arg' => q[],
  [...]
};

J’ai donc essayais de changer dans le fichier « /home/orj/.cpan/CPAN/MyConfig.pm » mais çà plante… [1]

En changeant la valeur de « makepl_arg » en :

$CPAN::Config = {
  [...]
  'makepl_arg' => q[PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36],
  [...]
};

Comme cela est écrit ici : Installation into a Nonstandard Directory (Practical mod_perl) ou sur cette page Installing mod_perl without superuser privileges mais en ajoutant le répertoire « common » avec dedans « bin/ » et « lib/perl/5.36/ » à la place de « bin/ » et « lib/perl5/ »

Pour informations :

orj@vps:~/myperl5 # cpan
Loading internal logger. Log::Log4perl recommended for better logging
Terminal does not support AddHistory.

To fix that, maybe try>  install Term::ReadLine::Perl


cpan shell -- CPAN exploration and modules installation (v2.33)
Enter 'h' for help.

cpan[1]> o conf
$CPAN::Config options from /home/orj/.cpan/CPAN/MyConfig.pm:
    commit             [Commit changes to disk]
    defaults           [Reload defaults from disk]
    help               [Short help about 'o conf' usage]
    init               [Interactive setting of all options]

    allow_installing_module_downgrades [ask/no]
    allow_installing_outdated_dists [ask/no]
    applypatch         []
    auto_commit        [0]
    build_cache        [100]
    build_dir          [/home/orj/.cpan/build]
    build_dir_reuse    [0]
    build_requires_install_policy [yes]
    bzip2              [/usr/bin/bzip2]
    cache_metadata     [1]
    check_sigs         [0]
    cleanup_after_install [0]
    colorize_debug     undef
    colorize_output    [0]
    colorize_print     undef
    colorize_warn      undef
    commandnumber_in_prompt [1]
    commands_quote     undef
    connect_to_internet_ok [1]
    cpan_home          [/home/orj/.cpan]
    curl               undef
    dontload_hash      undef
    dontload_list      undef
    ftp                undef
    ftp_passive        [1]
    ftp_proxy          []
    ftpstats_period    undef
    ftpstats_size      undef
    getcwd             [cwd]
    gpg                [/usr/bin/gpg]
    gzip               [/usr/bin/gzip]
    halt_on_failure    [0]
    histfile           [/home/orj/.cpan/histfile]
    histsize           [100]
    http_proxy         []
    inactivity_timeout [0]
    index_expire       [1]
    inhibit_startup_message [0]
    keep_source_where  [/home/orj/.cpan/sources]
    load_module_verbosity [none]
    lynx               undef
    make               [/usr/bin/make]
    make_arg           []
    make_install_arg   []
    make_install_make_command [/usr/bin/make]
    makepl_arg         [PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36]
    mbuild_arg         []
    mbuild_install_arg []
    mbuild_install_build_command [./Build]
    mbuildpl_arg       []
    ncftp              undef
    ncftpget           undef
    no_proxy           []
    pager              [/usr/bin/less]
    password           undef
    patch              [/usr/bin/patch]
    patches_dir        undef
    perl5lib_verbosity [none]
    plugin_list
    prefer_external_tar [1]
    prefer_installer   [MB]
    prefs_dir          [/home/orj/.cpan/prefs]
    prerequisites_policy [follow]
    proxy_pass         undef
    proxy_user         undef
    pushy_https        [1]
    randomize_urllist  undef
    recommends_policy  [1]
    scan_cache         [atstart]
    shell              [/bin/bash]
    show_unparsable_versions [0]
    show_upload_date   [0]
    show_zero_versions [0]
    suggests_policy    [0]
    tar                [/usr/bin/tar]
    tar_verbosity      [none]
    term_is_latin      [1]
    term_ornaments     [1]
    test_report        [0]
    trust_test_report_history [0]
    unzip              [/usr/bin/unzip]
    urllist
        0 [http://cpan.mirrors.ovh.net/ftp.cpan.org/]
        1 [ftp://cpan.cse.msu.edu/]
        2 [https://cpan.org/]
    urllist_ping_external undef
    urllist_ping_verbose undef
    use_prompt_default [0]
    use_sqlite         [0]
    username           undef
    version_timeout    [15]
    wait_list          undef
    wget               [/usr/bin/wget]
    yaml_load_code     [0]
    yaml_module        [YAML]


cpan[2]>

Si vous souhaitez configurer de novo votre CPAN, voici les commandes utiles à taper dans le cpan.

cpan>o conf
cpan>o conf init
cpan>o conf urllist

Pour modifier une valeur type string à rien :

cpan>o conf makepl_arg ''
cpan>o conf commit

Pour ajouuter une valeur à un champ type array :

cpan>o conf urllist push https://www.cpan.org/

Pour supprimer une valeur d’un array :

cpan>o conf urllist shift # début
cpan>o conf urllist pop # fin

J’ajoute ce lien « Trouver des miroirs CPAN » → Find CPAN mirrors and configure the local CPAN mirror list

Je cherche…


[1} → En configurant « makepl_args » perl ne retourne cette erreur sur en exemple cpan> install Date

[...]
BEGIN failed--compilation aborted at Makefile.PL line 2.
Warning: No success on command[/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36]
  SYBER/Date-5.2.11.tar.gz
  /home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36 -- NOT OK
Failed during this command:
 SYBER/XS-Install-1.3.5.tar.gz                : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 6400
 PLICEASE/File-Which-1.27.tar.gz              : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 DAGOLDEN/Capture-Tiny-0.48.tar.gz            : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 DAGOLDEN/Path-Tiny-0.144.tar.gz              : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 PLICEASE/Alien-Build-2.76.tar.gz             : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 PLICEASE/Alien-cmake3-0.08.tar.gz            : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 SYBER/Test-Catch-2.0.0.tar.gz                : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 SYBER/XS-libcatch-3.0.0.4.tar.gz             : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 SYBER/XS-Framework-1.5.5.tar.gz              : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 SYBER/XS-libpanda-1.5.9.tar.gz               : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 SYBER/next-XS-1.0.7.tar.gz                   : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 SYBER/Date-5.2.11.tar.gz                     : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512
 SYBER/Export-XS-3.0.6.tar.gz                 : writemakefile NO '/home/orj/myperl5/common/bin/perl Makefile.PL PREFIX=/home/orj/myperl5 INSTALLBIN=/home/orj/myperl5/common/bin INSTALLPRIVLIB=/home/orj/myperl5/common/lib/perl/5.36' returned status 512

C’est comme si Makefile.PL PREFIX / INSTALLBIN / INSTALLPRIVLIB ne fonctionnait pas :confused:

Si tu cherche systématiquement à travaillé en dehors du système le plus simple alors serait de te mettre dans un virtualenv

En fait @Clochette, j’essaie justement de créait comme un sous-programme sur n’importe quel système avec « perl-base » et les modules dont j’aurais besoin, et cela donc dans un répertoire non standard.
Plus tard, dans l’année, j’espère :relaxed: j’essairais autre chose comme utilisait le « perl » du systeme et faire en sortes que je puisse installer les modules supplémentaires dans le répertoire de mon sous programme.
Donc, pour le moment, j’essaie de bien comprendre l’installation de « perl-base » et des modules.
Ça fait 3 install que je fais, plus des changements de configuration et çà me fout le bordel. Ce n’est pas grave… Tant que ce n’est pas parfait… je ré-essaie. J’apprends des commandes sur cet environnement.

Actuellement je cherche où pourrait se trouver « ce nom », cette directive « perl5 » que j’aimerai remplacer par « perl/version.x.y/ ».
J’ai réussis à installer des modules dans le « bon répertoire » mais en changeant/feintant la directive INSTALL_BASE / PREFIX des modules jusqu’au répertoire « common ». Il faut que je traduise la page Cpan::FirstTime :wink: Il doit y avoir les informations que je cherche dedans.

En plus du paramètre PREFIX à ajouter sur « makepl_arg ».

Je lis que :

 mbuild_arg
      Paramètres pour la commande './Build' ? Le paramètre peut être :
      --extra_linker_flags -L/usr/foo/lib # emplacement de bibliothèque non standard

C’est sûrement celle-ci :smiley: - Il reste toujours le dossier « perl5/ » que j’aimerais changer en « perl/version.x.y/ ».

Et,

mbuildpl_arg
     Un Build.PL est exécuté par perl dans un processus séparé. 
     De même, nous exécutons './Build' et './Build install' dans des processus séparés. 
     Si vous avez des paramètres à transmettre aux appels, veuillez les spécifier ici.

Il faut que j’essaie cela :wink:


PS : Je dois essayais d’installer les modules manuellement (en téléchargeant les « tar.gz » et en le compilant) comme cela est expliqué ici - peut-être que, c’est le mieux dans ce cas - À essayer, savoir les pour et les contres.

Sinon, j’ai vous lie 2 autres adresses FRançaises qui expliquent « perl » pour un débutant comme moi :slight_smile:

  1. Formation Perl - Guide Perl : les modules
  2. Programmation Perl/Les modules — Wikilivres

Bonne soirée.

quitte à apprendre le perl commence d’abord avec le standard de base; tu feras du hors piste plus tard.

Il faut que je connaisse tous les modules :star_struck: :rofl: :crazy_face:

Je lis un livre « o’reilly » sur « perl/cgi » le soir devant la télévision :wink:

Bonjour,

Histoire de mettre le sujet de discussion en résolu :innocent:

Comme c’est écrit sur le site, la page « Perl Source » du site www.cpan.org

Pour supprimer/delete "perl" que je viens d'installer dans mon répertoire personnel "homedir" :
orj@vps:~ # rm -rf /home/orj/myperl5/ /home/orj/.cpan/ /home/orj/perl-5.36.0/

How to install from source :

 wget https://www.cpan.org/src/5.0/perl-5.36.0.tar.gz
 tar -xzf perl-5.36.0.tar.gz
 cd perl-5.36.0
 ./Configure -des -Dprefix=$HOME/localperl
 make
 make test
 make install

C’est très simple :smiley:

Plus il faut configurer les variables d’environnement dans votre fichier :

orj@vps:~ # vi .bashrc
[...]
PATH="${HOME}/localperl/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="${HOME}/localperl/lib/5.36.0:${HOME}/localperl/lib/perl5:${HOME}/localperl/lib/site_perl/5.36.0/x86_64-linux"; export PERL5LIB;
PERLLIB=$PERL5LIB; export PERLLIB;
PERL_LOCAL_LIB_ROOT=$PERL5LIB; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"${HOME}/localperl\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=${HOME}/localperl"; export PERL_MM_OPT;

orj@vps:~ # source .bashrc

orj@vps:~ # which perl
/home/orj/localperl/bin/perl

orj@vps:~ # perl -V
Summary of my perl5 (revision 5 version 36 subversion 0) configuration:

  Platform:
    osname=linux
    osvers=6.1.4-ninja
    archname=x86_64-linux
    uname='linux vps 6.1.4-ninja #1 smp preempt_dynamic sun jan 8 06:11:10 cet 2023 x86_64 gnulinux '
    config_args='-des -Dprefix=/home/orj/localperl'
[...]
  Built under linux
  Compiled at Jan 14 2023 15:49:46
  %ENV:
    PERL5LIB="/home/orj/localperl/lib/5.36.0:/home/orj/localperl/lib/perl5:/home/orj/localperl/lib/site_perl/5.36.0/x86_64-linux"
    PERLLIB="/home/orj/localperl/lib/5.36.0:/home/orj/localperl/lib/perl5:/home/orj/localperl/lib/site_perl/5.36.0/x86_64-linux"
    PERL_LOCAL_LIB_ROOT="/home/orj/localperl/lib/5.36.0:/home/orj/localperl/lib/perl5:/home/orj/localperl/lib/site_perl/5.36.0/x86_64-linux"
    PERL_MB_OPT="--install_base "/home/orj/localperl""
    PERL_MM_OPT="INSTALL_BASE=/home/orj/localperl"
  @INC:
    /home/orj/localperl/lib/5.36.0/x86_64-linux
    /home/orj/localperl/lib/5.36.0
    /home/orj/localperl/lib/perl5/x86_64-linux
    /home/orj/localperl/lib/perl5
    /home/orj/localperl/lib/site_perl/5.36.0/x86_64-linux
    /home/orj/localperl/lib/site_perl/5.36.0/x86_64-linux
    /home/orj/localperl/lib/site_perl/5.36.0
    /home/orj/localperl/lib/5.36.0/x86_64-linux
    /home/orj/localperl/lib/5.36.0
cat .cpan/CPAN/MyConfig.pm
orj@vps:~ # cat .cpan/CPAN/MyConfig.pm

$CPAN::Config = {
  'allow_installing_module_downgrades' => q[ask/no],
  'allow_installing_outdated_dists' => q[ask/no],
  'applypatch' => q[],
  'auto_commit' => q[0],
  'build_cache' => q[100],
  'build_dir' => q[/home/orj/.cpan/build],
  'build_dir_reuse' => q[0],
  'build_requires_install_policy' => q[yes],
  'bzip2' => q[/usr/bin/bzip2],
  'cache_metadata' => q[1],
  'check_sigs' => q[0],
  'cleanup_after_install' => q[0],
  'colorize_output' => q[0],
  'commandnumber_in_prompt' => q[1],
  'connect_to_internet_ok' => q[1],
  'cpan_home' => q[/home/orj/.cpan],
  'ftp_passive' => q[1],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[/usr/bin/gpg],
  'gzip' => q[/usr/bin/gzip],
  'halt_on_failure' => q[0],
  'histfile' => q[/home/orj/.cpan/histfile],
  'histsize' => q[100],
  'http_proxy' => q[],
  'inactivity_timeout' => q[0],
  'index_expire' => q[1],
  'inhibit_startup_message' => q[0],
  'keep_source_where' => q[/home/orj/.cpan/sources],
  'load_module_verbosity' => q[none],
  'make' => q[/usr/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'make_install_make_command' => q[/usr/bin/make],
  'makepl_arg' => q[],
  'mbuild_arg' => q[],
  'mbuild_install_arg' => q[],
  'mbuild_install_build_command' => q[./Build],
  'mbuildpl_arg' => q[],
  'no_proxy' => q[],
  'pager' => q[/usr/bin/less],
  'patch' => q[/usr/bin/patch],
  'perl5lib_verbosity' => q[none],
  'prefer_external_tar' => q[1],
  'prefer_installer' => q[MB],
  'prefs_dir' => q[/home/orj/.cpan/prefs],
  'prerequisites_policy' => q[follow],
  'pushy_https' => q[1],
  'recommends_policy' => q[1],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/bash],
  'show_unparsable_versions' => q[0],
  'show_upload_date' => q[0],
  'show_zero_versions' => q[0],
  'suggests_policy' => q[0],
  'tar' => q[/usr/bin/tar],
  'tar_verbosity' => q[none],
  'term_is_latin' => q[1],
  'term_ornaments' => q[1],
  'test_report' => q[0],
  'trust_test_report_history' => q[0],
  'unzip' => q[/usr/bin/unzip],
  'urllist' => [q[https://cpan.org/]],
  'use_prompt_default' => q[0],
  'use_sqlite' => q[0],
  'version_timeout' => q[15],
  'wget' => q[/usr/bin/wget],
  'yaml_load_code' => q[0],
  'yaml_module' => q[YAML],
};
1;
__END__

Puis pour vérifier que les modules s’installent bien :

orj@vps:~ # cpan
Loading internal logger. Log::Log4perl recommended for better logging
Terminal does not support AddHistory.

To fix that, maybe try>  install Term::ReadLine::Perl

cpan shell -- CPAN exploration and modules installation (v2.33)
Enter 'h' for help.

cpan[1]> install URI
cpan[1]> quit

Tout fonctionne impeccablement !

orj@vps:~ # vi myscriptperl/uri.pl
use strict;
use warnings;

use URI;
#use URI::URL;
#use URI::Escape;
#use URI::mailto;

#--------------------------------
# Exemple : https://lwp.interglacial.com/ch04_01.htm

my $url = URI->new("https://howto.zw3b.fr/linux/reseaux/ssh-scp-par-certificats?comment=10&id=1#auth");

print "\n//--------------------------------------------\n\n";
print "Parse URI : ".$url." \n";

print "Scheme : ", $url->scheme( ), "\n";
print defined($url->userinfo( )) ? "Userinfo: ".$url->userinfo( )."\n" : "Userinfo : false\n";
print "Hostname : ", $url->host( ), "\n";
print "Port : ", $url->port( ), "\n";
print "Path : ", $url->path( ), "\n";
print defined($url->query( )) ? "Query: ".$url->query( )."\n" : "Query : false\n";
print defined($url->fragment( )) ? "Fragment: ".$url->fragment( )."\n" : "Fragment : false\n";
print "\n//--------------------------------------------\n\n";

print "Parse segment : ".$url." \n";

my @bits = $url->path_segments( );
for (my $i=0; $i < @bits; $i++) {
  print "$i {$bits[$i]}\n";
}
print "\n//--------------------------------------------\n\n";

print "Parse query : ".$url." \n";

my @params = $url->query_form( );
for (my $i=0; $i < @params; $i++) {
  print "$i {$params[$i]}\n";
}
print "\n//--------------------------------------------\n\n";

Puis on vérifie que le script fonctionne :

orj@vps:~ # perl myscriptperl/uri.pl
//--------------------------------------------

Parse URI : https://howto.zw3b.fr/linux/reseaux/ssh-scp-par-certificats?comment=10&id=1#auth 
Scheme : https
Userinfo : false
Hostname : howto.zw3b.fr
Port : 443
Path : /linux/reseaux/ssh-scp-par-certificats
Query: comment=10&id=1
Fragment: auth

//--------------------------------------------

Parse segment : https://howto.zw3b.fr/linux/reseaux/ssh-scp-par-certificats?comment=10&id=1#auth 
0 {}
1 {linux}
2 {reseaux}
3 {ssh-scp-par-certificats}

//--------------------------------------------

Parse query : https://howto.zw3b.fr/linux/reseaux/ssh-scp-par-certificats?comment=10&id=1#auth 
0 {comment}
1 {10}
2 {id}
3 {1}

//--------------------------------------------

On en apprend tous les jours :smiley: :rofl: :blush:

Bonne journée, bon weekend.

Et pour mon répertoire « common » je le mettrais à la place de « localperl » :wink:

Salutations,
Romain

Cependant, perl étant déjà en standard, évitez d’en installer un autre, avant d’avoir besoin de la toute dernière version, il y a le temps.