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 :

[langage] if et boucle { ..}


Sujet :

Langage Perl

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut [langage] if et boucle { ..}
    Salut

    Pourkoi quand je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $a=$b;
    if($a==$b)
    print "egaux";
    Ca marche pas et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $a=$b;
    if($a==$b)
    {
             print "egaux";
    }
    Ca marche

    Pourkoi il fo mettre les { } obligatoirement?
    Cest des option de perl ?...

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Parce que c'est du Perl et pas du C ...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    salut

    merci pour la rapidite

    Donc je dois toujours mettre les accolades?

    Mais on dit que le prel reprend toutes les facilites du C alors pourkoi il prend pas ca des fois ce serait plus simple et moins lourd ke les accolades non?

  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
    oui mais même si Perl reprend les facilités du C, Perl est un langage de programmation à part entière !

    Et quand on dis qu'il reprend des trucs du C, il n'en reprend pas tout. Déjà, Perl a ses propres fonctions mais ne serait-ce par exemple pour pour le switch du C, y a pas ça en Perl.

    Donc oui, dès que tu ouvres un bloc, il faut l'entourer d'accolades.

    Autre piège que je sens qu'il pourrait t'arriver : if ($a == $b) ... Ok, == est parfait pour comparer des valeurs numériques mais si tu compares deux chaînes, ne te fais pas avoir et remplace == par eq

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    lol

    trop tard chuis deja tomber dans le piege 8)
    Torai pu me le dire avant
    mais g trouve sur le net

    Par contre g pas encore trouver comment passer des parametres a un script perl
    Si yaen a ki save chui preneur


    Cest vrai que Perl est un langage a part entiere mais souvent on dit kil reprend les facilites du C. Mais a ce ke je vois il les prend pas toutes
    Pas grave on fera avec


    PS:C vrai chuis un newbie de Perl

    En tout cas merci ded votre aide

  6. #6
    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
    exemple de script Perl récupèrant 2 paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    use strict;
    my $Param1 = $ARGV[0];
    my $Param2 = $ARGV[1];
     
    print "param recus = $Param1, $Param2\n";
    et comment qu'il fonctionne ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl Mon_prog.pl toto titi
    ce qui donnera dans le print :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param recus = toto, titi\n
    Vu que tu te lances tout juste dans le Perl :
    - utilise toujours "use strict;" au début de tes scripts. Ca t'oblige à déclarer chaque variable avec un "my" devant mais au moins, tu ne te feras pas avoir si par mégarde tu utilises en plein milieu de ton code une variable $totoo alors que tu voulais dire $toto. Avec use strict, Perl t'avertira que $totoo lui est inconnue, ce qui te fera gagner un temps précieux

    - lance perl comme ceci "perl -w mon_prog.pl", le flag "-w" oblige Perl à faire plus gaffe à ce que fait ton script. En cas d'erreur, ça te retournera davantage de messages d'avertissements (-w pour warnings).

    - quand tu lances un script en l'alimentant avec des paramètres, tous les paramètres attérissent dans le tableau @ARGV. Comme tu viens du C, cette notion doit te paraître plus que connue mais là encore, attention. En C, ARGV[0] contient le nom du programme, PAS EN PERL. Le nom du programme est alloué à la variable $0 et donc $ARGV[0] est bel et bien le 1er paramètre donné à ton programme.

  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
    Note bien ça dans tes tablettes, ce qui suit est tiré de l'excellentissime manuel de Perl perlallfr.pdf :

    voir doc ici : http://freealter.org/doc_distrib/perl-5.00502/fr/DocFr/perlallfr.pdf

    PerlTrap ---> Les Pièges de C
    Les programmeurs C cérébraux devraient prendre note de ce qui suit :
    Les accolades sont requises pour les if et les while.
    Vous devez utiliser elsif à la place de else if.
    Les mots-clés break et continue de C deviennent respectivement last et next en Perl. Contrairement au C, ceux-ci ne fonctionnent pas à l’intérieur d’une structure do { } while.
    Il n’y a pas d’instruction switch (mais il est aisé d’en construire une à la volée).
    Les variables commencent par "$", "@" ou "%" en Perl.
    printf() n’implémente pas le format "*" interpolant les largeurs de champs, mais il est trivial d’utiliser l’interpolation de chaînes entre guillemets pour obtenir le même résultat.
    Les commentaires commencent par "#", pas par "/*".
    Vous ne pouvez pas prendre l’adresse de quelque chose, bien qu’un opérateur analogue en Perl est la barre oblique inverse, qui crée une double référence (hein ? NDT).
    ARGV doit être en majuscules. $ARGV[0] est l’argv[1] du C, et argv[0] atterrit dans $0.
    Les appels systèmes tels que link(), unlink(), rename(), etc. renvoient autre chose que zéro en cas de succès.
    Les handlers de signaux manipulent des noms de signaux, pas des nombres. Utilisez kill -l pour déterminer leurs noms sur votre système.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Super

    G fais un copier coller de tout ce que tu mas dit. Tous est dans mes tablettes

    Merci bcp pour ton aide.

    Par contre T pas a jour
    Pour la doc perl je lave deja telecharger et il existe une version plus recente la mienne date du 17 mars 2003 (ya plus de page )
    Par contre desole pour ce ki la veulent je C plus ou je ai dowloader

    Merci et A+
    Prochainement sur PERL :Question de newbie 8)

  9. #9
    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
    Vi, Perl reprend toutes les facilités du C et même plus, donc pour ta première question, je te signale qu'en perl, on peut écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $a=$b; 
    print "égaux" if( $a==$b or $a eq $b ) ;
    Ce qui est encore mieux qu'en C non ?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Cest vrai ke cest mieux, enfin disons que cest different je pense qu'apres c un question d'habitude.

    Donc le Perl est fait de subtilites

    En parlant de ca si vous connaissez des truc de ce genre et qui sont courant
    chui preneur

    En tout cas merci pour linfo

  11. #11
    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
    Ben presque tous les mots clés pour les structures de boucle ou conditionnelle peuvent-être utilisés comme ça, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print for ("Bonjour", " tout", " le", " monde ! :)\n");
    Si tu ne comprend pas ce bout de code, dis le moi, c'est un raccourci très courant et très pratique en Perl.

    Autre truc très courant en Perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open FICHIER, "lire.txt"   or   die "open lire.txt : $!";
    C'est le 'or' qui est important ici : il n'effectue son second opérateur que si le premier renvoit une valeur fausse, donc ici, si open réussit, il renvoit vrai, sinon undef qui est une valeur fausse, donc si open réussit, or n'exécute pas le die et renvoit vrai (mais ici on s'en fout) et passe à l'instruction suivante, par contre si le open échoue, le or ne sait pas encore s'il doit renvoyer vrai (c'est un ou inclusif) et exécute donc le die, c'est à dire arrête le programme avec une exception et fournit le message d'erreur.


    Enfin, y a tout un tas d'autres expressions idiomatique en perl.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Salut

    Citation Envoyé par Jedai
    Enfin, y a tout un tas d'autres expressions idiomatique en perl.
    Jadore les expression idiomatique

    G compris pour le for 8) mais un foreach serait plus clair dans ce cas non?

    En tout cas Merci pour les infos je suppose que je decouvrirai le reste au fur et a mesure


    Jai appris plein de truc aujourdhui Merci a tous

  13. #13
    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 kacedda
    G compris pour le for 8) mais un foreach serait plus clair dans ce cas non?
    foreach et for == même chose

    et ces 3 expressions ci-dessous font la même chose, ce sont des boucles for :

    for($i = 0; $i < 10; ++$i)
    foreach(0 .. 9)
    for(0 .. 9)

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Salut

    Merci pour linfo

    VIVE Perl

    En fait ya vraiment plein doutil pour simplifier la vie

    Par contrte si je fais ca:
    for(0 .. 9)

    Estce ke je pe recuperer la valeur de la boucle cad comme si yaV $i ?

  15. #15
    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 kacedda
    Par contrte si je fais ca:
    for(0 .. 9)
    Estce ke je pe recuperer la valeur de la boucle cad comme si yaV $i ?
    Pour dire vrai, je t'ai donné cet exemple juste pour te montrer ce qu'on pouvait faire avec le Perl.

    Comme disent les perlistes, TIMTOWTDI (There Is More Than One Way To Do It) : il y a + d'une façon de faire la même chose.

    A toi de voir ce qui te plait le mieux.

    Pour répondre à ta question : for(0 .. 9) revient à dire foreach $_(0 .. 9), sauf que dans mon exemple $_ n'est pas indiqué parce qu'il est implicitement utilisé par la syntaxe.

    Au 1er passage dans la boucle for, $_ vaudra 0 et il ne vaudra 1 que lorsque ce qu'il a à faire dans la boucle sera terminé.

    Mais perso, je préfère ça : foreach $i(0 .. 9)

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Merci bcp pour vos conseille les gars, cest vraiment sympa , jen aurai encore surement besoin dans lavenir

    Merci encore 8)

Discussions similaires

  1. [langage] Liste + Boucle
    Par Girzi dans le forum Langage
    Réponses: 13
    Dernier message: 31/10/2006, 19h11
  2. [langage] condition de sortie d'une boucle
    Par perlaud dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2004, 10h25
  3. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54
  4. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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