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 :

Argument "NULL" isn't numeric


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut Argument "NULL" isn't numeric
    Bonjour ou Bonsoir,
    je suis absolument débutant en perl, quoique je connaisse un peu le C, beaucoup le fortran, et bien aussi le shell quel qu'il soit; dans un script d'un vingtaine de lignes que j'essaye de faire marcher, il se produit l'erreur suivante à un test :
    Argument "NULL" isn't numeric in numeric ne (!=) at /home/DAVID/PERL/bbbbb_telnet.pl line 155.
    Le test en question est le suivant :
    " if (@data != NULL) { ", et il porte sur la bannière de login que l'on obtient dès qu'on se connecte sur une machine par telnet de la façon suivante :
    $t->login(Name => $user, Password => $pass);
    my (@data) = $t->get();

    Je suppose qu'il suffirait donc de modifier le deuxième opérande du test, "NULL", afin qu'il soit de nature comparable à celle de la variable @data, mais je ne sais pas comment faire cela.
    Merci de m'y aider,
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  2. #2
    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
    Plutôt bizarre comme test :
    • Tester un tableau en contexte scalaire (string ou numérique) revient à tester son nombre d'éléments... Alors pourquoi "NULL" ?
    • != est un test numérique, il met ses arguments en contexte numérique, par exemple "15 passereaux" devient 15. Si tu compare avec une chaîne de caractère non numérique comme "NULL", il est probable que tu veuilles plutôt utiliser le test d'inégalité de string ne... Mais dans ton cas @data deviendra de toute façon un nombre, jamais une chaîne comme NULL donc le test n'a pas de sens.


    En bref pour corriger ce test il nous faudrait savoir ce qu'était l'intention du programmeur qui l'a écrit, ce que tu nous as donné est insuffisant pour en être certain.

    --
    Jedaï

  3. #3
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    le but du test est juste de savoir si le login s'est fait; et dans ce cas la bannière @data, dont tu m'apprends qu'elle est considérée comme un tableau, doit être non vide, ce qu'essaye de vérifier le test.

    Donc si j'essaye de me logger sur une machine qui n'existe pas, j'aurais un exemple de bannière-tableau @data que je pourrais peut-être stocker pour comparer lors d'une nouvelle tentative et savoir que le login a raté si je trouve la même chose; mais quel devrait alors être l'opérateur de test entre ces deux tableaux ?

    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  4. #4
    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
    Désolé mais "bannière" n'est pas un terme informatique précis aux dernière nouvelles, pas en Perl en tout cas. @data est un tableau parce que le sigil utilisé est "@", il serait un scalaire (string, nombre, référence) si le sigil était "$" et un hash si le sigil était "%".

    Pour tester si un tableau est non-vide, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(@data) { # @data a au moins un élément
     
    }
    else { # @ data est vide
     
    }
    (Néanmoins, même si @data a un élément, il pourrait tout à fait s'agir d'une chaîne de caractères vide ou même de undefined, d'où ma demande de précision sur les valeurs de retour possible pour ton get() ).

    S'il s'agit du get() de Net::Telnet, je ne comprends pas trop pourquoi tu utilises un tableau, a priori sa valeur de retour est une chaîne de caractère, ou undefined en cas d'erreur.

    --
    Jedaï

  5. #5
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Ok merci ça a marché sans message d'insulte et j'ai :
    @data="
    Processes: 125
    Usage of /: 60.4% of 26.79GB Swap usage: 2% Users logged in: 1

    Graph this data and manage this system at https://landscape.canonical.com/

    140 paquets peuvent être mis à jour.
    0 mise à jour de sécurité.

    " End of Line

    Ceci est ce que j'obtiens quand je me relogge sur me propre machine. (un ubuntu dans une vieille ferraille) La "bannière" dont je parlais est donc un tableau de huit lignes dont trois blanches.
    Merci encore,
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. awk ou sed : Supprimer argument entre doubles quotes sur une ligne de fichier
    Par SuperJoker dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 18/05/2014, 21h08

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