Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

perl -MCPAN -e 'install Compress::Zlib' ne marche pas

3 réponses
Avatar
paul POULAIN
Bonjour,

quelqu'un peut il me dire pourquoi la commande placée en sujet renvoie :
Can't locate object method "install" via package "Compress::Zlib" at -e line
1.

?
Je précise que les autres paquetages s'installent parfaitement bien avec
cette méthode, et que j'ai le même problème sur une mandriva et une debian.
--
Paul

3 réponses

Avatar
Paul Gaborit
À (at) Mon, 25 Feb 2008 17:34:28 +0100,
paul POULAIN écrivait (wrote):
quelqu'un peut il me dire pourquoi la commande placée en sujet renvoie :


Un sujet, ça se perd. Donc je recopie la ligne incriminée :

perl -MCPAN -e 'install Compress::Zlib'

Can't locate object method "install" via package "Compress::Zlib" at -e line
1.

?
Je précise que les autres paquetages s'installent parfaitement bien avec
cette méthode, et que j'ai le même problème sur une mandriva et une debian.



Je ne vois vraiment pas comment ça pourrait marcher (avec
Compress::Zlib ou n'importe quel autre module d'ailleurs).

En Perl, dire :

toto tutu;

est équivalent à dire :

tutu->toto();

(même si je ne la conseille pas, on utilise souvent cette syntaxe
inversée par exemple avec 'new'.)

Une syntaxe possible serait (extrait de la doc de CPAN) :

perl -MCPAN -e "CPAN::Shell->install('Compress::Zlib')"

ou à la rigueur (avec la syntaxe inversée) :

perl -MCPAN -e "install('Compress::Zlib') CPAN::Shell"


--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
paul POULAIN
Paul Gaborit wrote:

Je ne vois vraiment pas comment ça pourrait marcher (avec
Compress::Zlib ou n'importe quel autre module d'ailleurs).


??? Ca veut dire que j'installe de cette manière des paquetages Perl depuis
plusieurs années et que ca ne devrait pas marcher ???

En Perl, dire :

toto tutu;

est équivalent à dire :

tutu->toto();

(même si je ne la conseille pas, on utilise souvent cette syntaxe
inversée par exemple avec 'new'.)

Une syntaxe possible serait (extrait de la doc de CPAN) :

perl -MCPAN -e "CPAN::Shell->install('Compress::Zlib')"


Effectivement, ca, ca fonctionne.
quelle est donc la syntaxe "normale" ?
--
Paul

Avatar
Paul Gaborit
À (at) Tue, 26 Feb 2008 09:36:52 +0100,
paul POULAIN écrivait (wrote):
Paul Gaborit wrote:

Je ne vois vraiment pas comment ça pourrait marcher (avec
Compress::Zlib ou n'importe quel autre module d'ailleurs).


??? Ca veut dire que j'installe de cette manière des paquetages Perl depuis
plusieurs années et que ca ne devrait pas marcher ???


Exactement ! D'ailleurs il suffit d'essayer pour s'en rendre compte.
;-)

En fait, cette syntaxe bancale fonctionne dans la mesure où le module
demandé n'est pas déjà chargé en mémoire.

En fait, la ligne suivante :

install Compress::Zlib;

sera d'abord interprétée comme :

Compress::Zlib->install;

si le module Compress::Zlib est chargé en mémoire (ce qui est le cas
lorsqu'on utilise le module CPAN).

Sinon, Perl tente une autre interprétation :

install('Compress::Zlib');

'install' étant exporté par CPAN, ça marchera.

Une syntaxe possible serait (extrait de la doc de CPAN) :

perl -MCPAN -e "CPAN::Shell->install('Compress::Zlib')"


Effectivement, ca, ca fonctionne.
quelle est donc la syntaxe "normale" ?


La syntaxe normale est celle ci-dessus : c'est celle donnée par la
documentation du module CPAN.

Vu que CPAN exporte la fonction 'install', on peut simplifier :

perl -MCPAN -e "install('Compress::Zlib')"

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>