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 :

comparaison en perl


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut comparaison en perl
    Bonjour, j'essaie de creer un petit script pour m'entrainer en perl car je debute donc je suis un initié lol et voila je me suis opposé a un probleme:
    Comment comparer deux chaine "de caractére" je sais pas si ça se dit comme ça en perl. Je sais qu'en C c'est comme cela

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char var[50];
    printf("Entrer le mot de pass:");
    scanf("%s",var);
    if (!strcmp(var,"test"))
    {
    printf("mot de pass correct\n");
    }

    voila j'aimrai faire exactement comme ça mais en perl quoi je bloque.
    Merci beaucoup pour votre aide.
    A bientot

  2. #2
    Expert confirmé
    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
    Par défaut
    En Perl, tu dois utiliser l'opérateur "eq" pour tester l'égalité de deux chaînes de caractères, ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $str1 = "Hello";
    my $str2 = "Hello";
    if( $str1 eq $str2 ) {
      print "str1 et str2 sont égales.\n";
    }
    Si tu veux l'exact équivalent de strcmp(), c'est l'opérateur "cmp".

    Attention : pour les nombres, les opérateurs d'égalité et de comparaison sont "==" et "<=>".

    (tu as par ailleurs "<="/"le", ">="/"ge" et "!="/"ne")

    --
    Jedaï

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut
    A ouui j'ai compris mais par exemple sur ce petit script pourquoi cmd ne marche pas dsl :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    print "Entrer mot de passe:";
    $a=<STDIN>;
    if ($a cmp "salut")
    {
    	print "correct\n";
    }
    Merci beaucoup de votre aide.

  4. #4
    Expert confirmé
    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
    Par défaut
    N'utilise pas d'abréviations comme "dsl", ce n'est pas trop bien vu sur le forum. Par ailleurs mets ton code entre balise CODE !!

    Dans ton script, $a contient probablement "salut\n" car tu n'as pas retiré ce saut de ligne, tu dois utiliser chomp() pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/bin/perl
    use strict; use warnings;
     
    print "Entrer mot de passe : ";
    my $guess = <STDIN>;
    chomp( $guess );
    if ($guess eq "salut") {
      print "Correct\n";
    }
    Je te conseille fortement d'utiliser les pragmas "strict" et "warnings" comme dans mon code, ils t'aideront à avoir une programmation plus disciplinée et moins sujette à erreur et te signaleront les problèmes potentiels.

    Encore une chose : cmp est l'équivalent de strcmp(), donc "a" cmp "a" vaut 0 (soit une valeur fausse en Perl), exactement comme strcmp() dans pareil cas, il vaut mieux utiliser "eq" si tu veux juste tester l'égalité, "cmp" est plus utile pour classer des strings, tout particulièrement dans un bloc pour la fonction sort().

    --
    Jedaï

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut
    A d'accord escusez-moi pour les régles du forum. Merci beaucoup de ton aide
    donc je dois mettre (use strict; use warnings pour que les erreurs soient clairs
    et plus vite identifiées, d'accord j'ai bien compris.
    Merci beaucoup .

  6. #6
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par jerem_psg
    donc je dois mettre (use strict; use warnings pour que les erreurs soient clairs
    et plus vite identifiées, d'accord j'ai bien compris.
    Merci beaucoup .
    En fait, "warnings" te préviendra d'erreur potentielles (qui seront pratiquement toujours des erreurs réelles), "strict" t'obligera à déclarer toutes tes variables (avec my() habituellement), ce qui t'évitera les cauchemars de débugueur que sont les petites fautes de frappe sur un nom de variable par exemple...
    Au final tu obtiendras un programme bien plus propre que sans eux (car Perl est un langage très (trop pour le débutant) libéral par défaut).

    Si parfois tu as un doute sur la signification d'un warning, rajoute "use diagnostics;" au début du programme, et tu auras une explication plus longue du warning, ainsi que des suggestions pour le corriger.

    ("strict" a quelques autres effets, mais si tu ne t'en aperçois jamais ce sera tant mieux, car les autres pratiques qu'il interdit sont encore bien plus dangereuse que l'auto-déclaration de variable)

    --
    Jedaï

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

Discussions similaires

  1. probleme comparaison données perl
    Par S.clem dans le forum Langage
    Réponses: 3
    Dernier message: 21/03/2011, 11h38
  2. Perl, bases, lister rép et comparaisons de fichiers
    Par Arnaud62 dans le forum Langage
    Réponses: 4
    Dernier message: 16/10/2008, 16h19
  3. Réponses: 4
    Dernier message: 13/03/2008, 16h19
  4. Comparaison de tableaux (PERL + MYSQL + CISCO)
    Par pat94 dans le forum Langage
    Réponses: 5
    Dernier message: 05/10/2007, 15h06
  5. [perl] comparaison de fichiers
    Par falco- dans le forum Langage
    Réponses: 3
    Dernier message: 12/07/2007, 19h54

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