Problème bête que je n'arrive pas à résoudre
Je souhaite faire une procedure (fonction) qui permet de tester si un module est installé sur la machine et si non, avoir un message propre disant que le module n'est pas installé au lieu d'avoir le message venant de perl, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Can't locate tto.pm in @INC (@INC contains: /usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1 /usr/share/perl/5.6.1 /usr/local/lib/site_perl .) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
voici mon script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      #!/usr/bin/perl -w
      use strict;
      use Carp;
      &test_module("toto");
 
      sub test_module {
              my $module = shift;
              my $cmd = `perl -e "use $module"`;
              if ($cmd =~ /^\s*$/i) {
                      use $module;
                      print "$module installe";
              } else {
                      print "Vous devez installer ce module \"$module\" pour utiliser ce script";
                      exit;
              }
}
Mais j'ai plusieurs soucis :
sous windows, je n'ai aucun message au lieu d'avoir le message
Vous devez installer ce module "toto" pour utiliser ce script
sous linux, j'ai ce message :
syntax error at test.pl line 10, near "use $module"
syntax error at test.pl line 11, near "} else"
Execution of test.pl aborted due to compilation errors.
===============

si je met use $module en commentaire :
j'obtiens sous windows
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
C:\Documents and Settings\Propriétaire>perl -e "use toto"
Can't locate toto.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
toto installe
et sous linux

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Can't locate toto.pm in @INC (@INC contains: /usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1 /usr/share/perl/5.6.1 /usr/local/lib/site_perl .) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
Donc voilà, rien n'est normal , après de multiples testes, je ne sais pas quoi faire et j'ai remarqué que le résultat de la commande n'est pas recuperé par la variable $cmd qui reste vide et du coup, le script passe dans le if et non dans le else et en plus le resultat de commande est directement affiché sur la console, puis le use n'est même pas executé correctement.

Or en testant une commande tel par ex, pas de soucis, le resultat est bien dans $cmd, une idée?

Sinon avez vous une autre commande ou méthode pour tester si un module est installé sur un serveur car j'aime pas rester sur un echec .
Je tiens à préciser que j'ai testé aussi la commande perldoc MODULE et c'est le même sous, $cmd ne recupere rien.

Merci