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 :

PERL pour les nuls


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut PERL pour les nuls
    Bonjour tout le monde,

    Je me permet de vous solliciter pour un script tout simple mais que je n'arrive pas à comprendre, je suis vraiment débutant.

    En gros, j'arrive pas à comprendre le résultat de ce script :

    --------------------------------------------------------------

    use strict;
    use warnings;

    my $i = 0;

    for ($i = 0; $i < 10; $i++)
    {
    print $i++;
    my $j = 0;
    print $i++ + $j++;
    }
    <>;

    --------------------------------------------------------------

    Le print $i++ m'affiche 0 2 4 6 8, jusqu'ici tout va bien mais avec la déclaration du $j et la somme de $i++ et $j++, en résultat j'ai :
    013467910

    C'est là que je ne saisie plus, donc si quelqu'un veut bien me venir en aide afin de comprendre le pourquoi du comment.

    Par avance merci.

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    le $j++ retourne la valeur de j puis l'augmente de 1

    Retrace les étapes de la boucle pas à pas et tu retrouveras ton affichage
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    le $j++ retourne la valeur de j puis l'augmente de 1

    Retrace les étapes de la boucle pas à pas et tu retrouveras ton affichage
    Bonjour Gardyen et merci de ton retour.

    Alors je commence à comprendre mais pourquoi alors j'ai :
    0 1 3 4 donc là j'ai augmenté de 1 ma valeur $i++ mais ensuite je passe à 6?

    Désolé ça doit te paraître bête...

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    on a tous commencé un jour !

    Tu incrémentes $i 3 fois au total dans une boucle:
    Boucle 1:
    $i = 0
    print $i++; => affiche 0, $i = 1
    print $i++ + $j++ => affiche 1, $i = 2
    Fin de la boucle $i++ => $i = 3

    essaie de continuer ce raisonnement avec les boucles suivantes
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    on a tous commencé un jour !

    Tu incrémentes $i 3 fois au total dans une boucle:
    Boucle 1:
    $i = 0
    print $i++; => affiche 0, $i = 1
    print $i++ + $j++ => affiche 1, $i = 2
    Fin de la boucle $i++ => $i = 3

    essaie de continuer ce raisonnement avec les boucles suivantes
    Je n'arrête pas de retourner la boucle dans tout les sens, je n'arrive pas à comprendre le résultat de print $i++ + $j++; c'est bien la somme des valeurs après incrémentation?

  6. #6
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    sauf que $j est déclaré dans la boucle, donc il revient à 0 à chaque itération, et donc l'affichage revient à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $i++ + 0; $j = 1;
    et donc tu ne le vois jamais dans l'affichage
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    sauf que $j est déclaré dans la boucle, donc il revient à 0 à chaque itération, et donc l'affichage revient à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $i++ + 0; $j = 1;
    et donc tu ne le vois jamais dans l'affichage
    Donc mon $i et mon $j à la première itiération sont à zéro puis ils sont incrémentés de 1 c'est bien ça?

  8. #8
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    ta valeur est incrémentée 1 fois pour chaque ++ par tour.

    sauf que j est remis à 0 à chaque tour avant l'incrémentation
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    ta valeur est incrémentée 1 fois pour chaque ++ par tour.

    sauf que j est remis à 0 à chaque tour avant l'incrémentation
    Re bonjour Gardyen, je me suis laissé le week end avant d'attaquer de nouveau.

    Alors je vais essayé de résumer :

    Dans ma boucle, le print $i++ = 0 2 4 6 8 "on incrémente de 1 et on affiche le résultat deux par deux" puis mon résultat print $i++ + $j++ = incrémentation de $i++ + 1 donc :

    0 + 1 = 1
    2 + 1 = 3
    4 + 1 = 5
    6 + 1 = 7
    8 + 1 = 9

    ms j'ai à l'affichage : 0 1 3 4 6 7 9 10?

    Il y a quelques choses que je ne comprend pas.... désolé

  10. #10
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    ton + $j++ ne fait rien du tout ! puisque tu as déclaré $j dans la boucle, il se trouve toujours remis à 0 avant l'affichage.

    pour y voir plus clair, enlève les incrémentations dans la boucle et n'affiche que les valeurs
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    ton + $j++ ne fait rien du tout ! puisque tu as déclaré $j dans la boucle, il se trouve toujours remis à 0 avant l'affichage.

    pour y voir plus clair, enlève les incrémentations dans la boucle et n'affiche que les valeurs
    Merci pour ton retour.

    Alors si j'enlève l'incrémentation du premier print donc print $i; j'ai = 0123456789 (ce qui est normal car j'incrémente ds ma boucle de 1 jusqu'à 10)

    si j'enlève l'incrémentation sur le print $i++ + $j++ donc print $i + $j = 00112233445566778899 (effectivement mon $j ne retourne rien)

    et si je remet l'incrémentation sur mon $i j'ai bien le même résultat donc :
    print $i++;
    $j = 0;
    print $i++ + $j = 013467910

    Donc j'incrémente de 1 sur le résultat du premier print $i++ (02468); c'est bien ca? en gros (0 + 1, 2+1, 4+1, 6+1, 8+1)?

  12. #12
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    oui, sachant que tu as encore une incrémentation à la fin de ta boucle, la 3e condition de ta boucle for
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    oui, sachant que tu as encore une incrémentation à la fin de ta boucle, la 3e condition de ta boucle for
    Bon je pense que je n'arrive pas à comprendre la boucle "for" lol

    pcq si j'incrémente encore une fois je devrais donc avoir (1 + 1, 3 + 1, 5 + 1, 7 + 1, 9 + 1)

    ce qui devrait être affiché 2 4 6 8 10

    j'ai essayé de le tourner avec While pour mieux comprendre

    my $i = 0;

    while ($i < 10)
    {
    $i++;
    print $i++;
    my $j = 0;
    print $i++ + $j++;
    }

    mais j'obtient 1245781011.

    Je pars du principe que la boucle for est un while déguisé, je me perd lol

  14. #14
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    à ceci près que l'incrémentation se fait en fin de boucle, donc ce serait plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ($i < 10)
    {
     
    print $i++;
    my $j = 0;
    print $i++ + $j++;
    $i++;
    }
    en attendant, FAQ
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    à ceci près que l'incrémentation se fait en fin de boucle, donc ce serait plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ($i < 10)
    {
     
    print $i++;
    my $j = 0;
    print $i++ + $j++;
    $i++;
    }
    en attendant, FAQ
    Merci pour la boucle for.

    J'ai quand même essayé avec le while pcq j'ai l'impression de mieux le comprendre et finalement, je peux écrire :
    while ($i < 10)
    {
    print $i++;
    print $i++;
    $i++;
    }
    Le résultat est strictement le même.

    J'ai aussi tester avec un $i < 1 à 2 à 3 et j'obtiens tjs 01 mais si je la passe à 4 j'ai 0134 puis je dois faire + 3 pour obtenir la suite donc $i < 7 = 013467 et + 3 pour avoir le résultat final dc $i < 10 = 013467910

    Donc j'essaie de décortiquer :

    tant que mon ($i < 10)
    j'affiche mon $i "résultat $i = 0"
    j'affiche mon $i incrémenté "résultat $i = 1"
    puis je l'incrémente encore une fois "résultat $i = 2"
    donc je reviens ds ma boucle et la valeur de mon $i = 2?

    alors on repart et j'ai donc :
    j'affiche mon $i "résultat $i = 2"
    j'affiche mon $i incrémenté "résultat $i = 3"
    puis je l'incrémente encore une fois "résultat $i = 4"
    donc je reviens ds ma boucle et la valeur de mon $i = 4?

    C'est bien ça?

  16. #16
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tant que mon ($i < 10)
    print $i++ <=> j'affiche mon $i "résultat $i = 0";$i est incrémenté = 1;
    print $i++ <=> j'affiche mon $i incrémenté "résultat $i = 1";$i est incrementé = 2;
    puis je l'incrémente encore une fois "résultat $i = 3"
    3 $i++, donc +3 à la fin de la boucle
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tant que mon ($i < 10)
    print $i++ <=> j'affiche mon $i "résultat $i = 0";$i est incrémenté = 1;
    print $i++ <=> j'affiche mon $i incrémenté "résultat $i = 1";$i est incrementé = 2;
    puis je l'incrémente encore une fois "résultat $i = 3"
    3 $i++, donc +3 à la fin de la boucle
    Mais le premier print affiche la valeur du $i :
    $i = 0
    print $i++ = 0
    non?

    après sur le second print $i++ on devrait avoir 1
    puis on l'incrémente de nouveau donc 2 ce qui fait qu'au début de la boucle mon $i = 2 ou 3?

  18. #18
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    le $j++ retourne la valeur de j puis l'augmente de 1

    Retrace les étapes de la boucle pas à pas et tu retrouveras ton affichage
    apparemment tu n'as pas entièrement saisi le sens de $i++ ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    apparemment tu n'as pas entièrement saisi le sens de $i++ ?
    Je pensais que le ++ incrémentait ma valeur de 1...
    Ms apparemment ce n'est pas ça!

  20. #20
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    encore un peu de doc...
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Chemin de perl pour les nuls
    Par toophigra dans le forum Langage
    Réponses: 6
    Dernier message: 05/02/2010, 20h06
  2. Réponses: 6
    Dernier message: 06/11/2005, 11h10
  3. C++ pour les nuls => Linux => Problème
    Par wizardman dans le forum Linux
    Réponses: 6
    Dernier message: 21/09/2005, 00h53
  4. Apprendre le réseau (pour les nuls)
    Par __fabrice dans le forum Développement
    Réponses: 5
    Dernier message: 08/03/2005, 13h49

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