IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

beug sur un code retour


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut beug sur un code retour
    lorsque je lance ce code, j'ai le message d'erreur suivant :Use of uninitialized value in numeric ne (!=) at :\TEMP\OC\essai1.pl line 4.


    system("$BatchEXE") ;
    $CodeRetour = $? ;

    if ( ${CodeRetour} != 0) {
    $MsgErreur="Erreur : Le Bath a rencontre une erreur\n" ;
    }
    else
    {
    print "c'est bon" ;
    }
    merci pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 031
    Points
    2 031
    Par défaut
    Citation Envoyé par vince2005
    lorsque je lance ce code, j'ai le message d'erreur suivant :Use of uninitialized value in numeric ne (!=) at :\TEMP\OC\essai1.pl line 4.
    Ce message apparait généralement lorsque ton script active le flag -w (warnings) sur sa première ligne (le shebang) et il est explicite : utilisation d'une variable ne contenant rien dans une comparaison numérique.

    Ta variable $CodeRetour est indéfinie (undef).

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut variable en undef
    Oui en effet, au début de mon script, j'ai activé le flag -w.

    Ma variable est défini ainsi :

    My $CodeRetour;

    Donc si je veux palier à ce probléme d'affichage, il faut que je définisse ma variable en undef

    undef %CodeRetour;

    ou puis je encore faire my $CodeRetour="";


    Pourtant quand j'execute avec la commande system, qu'il y est une erreur ou non, j'ai quand meme un code retour, qui par conséquent n'est pas vide.


    Merci pour vos réponses

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 031
    Points
    2 031
    Par défaut
    Je crois que tu te mélanges un peu entre les scalaires et les tableaux associatifs (ou encore hash)

    $CodeRetour est un scalaire
    %CodeRetour est un hash

    As-tu activé use strict; au début de ton code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    system("$BatchEXE") ;
    $CodeRetour = $? ;
     
    if ( ${CodeRetour} != 0) {            # <------ ${CodeRetour} ???
        $MsgErreur="Erreur : Le Bath a rencontre une erreur\n" ;
    }
    else {
        print "c'est bon" ;
    }
    si pas fait, active le, tu devrais avoir au moins un autre message d'erreur

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu veux probablement faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my $CodeRetour = system("$BatchEXE") ; ;
     
    if ( $CodeRetour != 0) {
        $MsgErreur="Erreur : Le Bath a rencontre une erreur\n" ;
    }
    else {
        print "c'est bon" ;
    }
    --
    Jedaï

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut voici mon code
    J'ai toujours un message d'erreur, que je déclare

    $CodeRetour = undef ;
    my $CodeRetour = "" ;
    my $CodeRetour ;

    message d'erreur :
    Argument "" isn't numeric in numeric eq (==) at.....

    use strict;
    use warnings;

    my $CodeRetour = "" ;
    system("C:/system/toto.exe") ;
    $CodeRetour=$? ;

    if ( ${CodeRetour} == 0)
    {
    print "On est bon" ;
    }
    else
    {
    print "erreur" ;
    }

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 031
    Points
    2 031
    Par défaut
    Pourquoi les accolades entourant CodeRetour dans if ( ${CodeRetour} == 0) ???

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut l'accolade
    elle sert à protéger la valeur, mais si je les retire !! le résultat est le meme !!!

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut code retour
    en fait mon code retour est vide !! c'est pour cela que ça plante !

    Mais je veux que si mon code retour soit vide ou différent de 0, alors j'affiche une erreur.

    est ce qu'il faut que dans ma déclaration, il faut que je donne une valeur quelconque à coderetour, comme 100 ou 200.

    Mais est ce cette valeur attribué à coderetour, ne sera pas prise par le langage perl ?

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 031
    Points
    2 031
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ( ! $CodeRetour)
    {
        print "On est bon" ;
    }
    else
    {
        print "erreur" ;
    }

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 031
    Points
    2 031
    Par défaut
    Je reproduit (un peu remanié) le code de Jedai, tu sembles l'avoir zappé mais il est très bon !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my $CodeRetour;
     
    $CodeRetour = system("$BatchEXE");
     
    if ( $CodeRetour ) {
        print "Erreur : Le Bath a rencontre une erreur\n" ;
    }
    else {
        print "c'est bon" ;
    }

Discussions similaires

  1. Convention sur les codes de retour des scripts
    Par NewTone dans le forum Linux
    Réponses: 0
    Dernier message: 19/11/2009, 00h54
  2. Positionner un code retour sur un chargement d'APPLET ?
    Par Bighobbit dans le forum Applets
    Réponses: 2
    Dernier message: 29/09/2006, 11h02
  3. [PC] Code retour cobol microfocus sur netexpress
    Par Titouf dans le forum Cobol
    Réponses: 1
    Dernier message: 05/10/2005, 21h13
  4. code retour UNIX sur erreur ORA
    Par vinz_07 dans le forum Administration
    Réponses: 7
    Dernier message: 25/08/2004, 11h04
  5. [commande DOS] Récupérer le code retour d'un programme
    Par bobunny dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 04/06/2004, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo