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

Le
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
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #1110571
À (at) Mon, 25 Feb 2008 17:34:28 +0100,
paul POULAIN
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 - Perl en français -
paul POULAIN
Le #1117846
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

Paul Gaborit
Le #1124762
À (at) Tue, 26 Feb 2008 09:36:52 +0100,
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 ???


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 - Perl en français -

Publicité
Poster une réponse
Anonyme