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 :

Fonction eval et égalité


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Fonction eval et égalité
    Bonjour,
    je ne comprend pas très bien le fonctionnement de la fonction eval:
    - lorsque je lui passe une chaine contenant des opérations booléennes (&&, ||) elle évalue correctement le résultat
    - lorsque je lui passe une chaine contenant des égalités, elle me renvoie 1 si elle est juste et rien du tout sinon (du coup je ne sais pas si le résultat a été évalué et est faux où si la fonction n'a pas réussie à l'évaluer).
    Quelqu'un pourrait-il m'expliquer la logique de ce résultat?
    "I tried so hard and got so far
    But, in the end, it doesn't even matter"
    In the End, Linkin Park

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Tu récupères le message d'erreur dans la variable $@:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval '$answer = $a / $b'; warn $@ if $@;
    Voir documentation ici:
    http://perldoc.perl.org/functions/eval.html

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Fonction eval et égalité
    Merci pour ta réponse.
    En fait, je viens de m'apercevoir que le problème n'est pas lié à la fonction mais plutôt à ma méconnaissance de perl (je débute dans ce langage).
    Pourquoi une affectation de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $variable = ($var1 == $var2);
    ne renvoit-il rien si le test est faux?
    Faut-il forcément faire comme ci-après?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $variable = ($var1 == $var2)?1:0;
    Je trouve étrange que l'on obtienne 1 si la réponse est vraie et rien du tout sinon....
    "I tried so hard and got so far
    But, in the end, it doesn't even matter"
    In the End, Linkin Park

  4. #4
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    En réalité, perl renvoie 1 quand un test est vérifié, et 0 quand un test est faux. Mais un 0 est interprété comme une chaine vide dans un contexte de chaine de caractère. Cependant, tu peux tout à fait comparer le résultat à 0 dans un contexte numérique, ce sera égal..

    En revanche, ce n'est pas égal à la chaine de caractère '0'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    use strict;
    use warnings;
    use Data::Dumper;
     
    my $a = 1;
    my $b = 2;
     
    my $result = ($a == $b);
     
    # test dans un contexte de chaine de caractère
    print "result vaut ''\n", if ($result eq '');
    # test dans un contexte numérique
    print "result vaut 0\n", if ($result == 0);

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  5. #5
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    J'allais oublier, $result ne vaut pas undef non plus. Il y a donc globalement 3 niveaux:

    1) undef, la variable n'est pas définie. Tester avec la fonction defined
    2) 0 ou '' , équivalent à 'faux'
    3) '0', la chaine de caractère contenant un 0

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Fonction eval et égalité
    Ok, merci pour tes réponses.
    Elles m'ont bien éclairées.
    "I tried so hard and got so far
    But, in the end, it doesn't even matter"
    In the End, Linkin Park

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

Discussions similaires

  1. Fonction eval en java ?
    Par ramislebob dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 00h22
  2. Parsage avec la fonction eval
    Par alain31tl dans le forum Langage
    Réponses: 12
    Dernier message: 23/11/2005, 15h27
  3. Simuler la fonction eval
    Par topwl dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 26/08/2005, 01h44
  4. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 17h45
  5. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42

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