Boucle While en Pearl

Bonjour,
j'ai créé un programme tout simple (en Perl) consistant à compter les lamas pour m'endormir. Je dois lancer un compteur s'arrêtant au moment ou j'appuie sur entrée. Quand je l'exécute dans mon invite de commande il ne me prend pas en compte la boucle WHILE. Pouvez-vous m'aider?
Voici le code :

#!/usr/bin/perl -w 

print "Je vais compter les lamas pour m'endormir.\n";
<>;

my $limite;
$limite = <>;
print "Jusqu'à combien dois-je compter ?\n";


#Situation initiale, le compteur est à 1
my $compteur = 1;
print "$compteur lama\n";

# Tant que le compteur n'a pas atteint sa limite
while ($compteur lt $limite)
{
        # On compte
        $compteur eq $compteur + 1;
        print "$compteur lamas\n";
}

print "zzzzzZZZZ";


5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    Je ne connais rien en code Perl mais j'ai fait quelques recherches sur les bases et voici ce que j'ai trouvé d'incohérent :

    - Pour faire une demande de donnée à un utilisateur il faut faire :
    print "How old are you?";
    $age = <>;
    


    et non :

    $age = <>;
    print "How old are you?";
    


    - Toutes les données entrées finissent par un symbole indiquant le "Entrée". Pour éviter ça, on utilise chomp :
    print "Jusqu'à combien dois-je compter ?"
    chomp($limite = <>)
    


    - Du coup, dans la condition de la boucle While, préfère : < plutôt que lt (sauf erreur de ma part) :
    while ($compteur < $limite)
    {
    ...
    }
    


    - La ligne :
    $compteur eq $compteur + 1;
    


    semble vouloir incrémenter la variable $compteur de 1. eq est un opérateur de comparateur de chaîne (ici on a des nombres et on souhaite pas comparer) qui compare deux chaines (ici $compteur et $compteur+1) et renvoie 1 si elles sont égales ou 0 si non.
    Pour l'affectation, il faut utiliser :
    $compteur = $compteur + 1
    

    Comme ici, il s'agit d'une incrémentation de 1, il y a :
    $compteur++
    


    J'espère ne pas avoir dit de bêtises.
    1. Je te remercie de ta réponse très explicite mais quand je lance le programme une erreur survient à la ligne de la WHILE. Le signe "<" produit une erreur.
      1. Modérateur
        Ceci fontionnera mieux:
        #!/usr/bin/perl -w 
        
        my $limite;
        my $compteur = 1;
        
        print "Je vais compter les lamas pour m'endormir.\n";
        print "Jusqu'à combien dois-je compter ?\n";
        $limite = <STDIN>;
        
        #il faudrait vérifier que $limite est >=1 !
        #Situation initiale, le compteur est à 1
        
        
        # Tant que le compteur n'a pas atteint sa limite
        while ($compteur <= $limite)
        {
            # On compte
            print "$compteur lamas\n";
            $compteur++ ;
        }
        
        print "zzzzzZZZZ\n";


        1. Cela me semblais mieux mais STDIN ne marcherai pas dans ce cas là. Mais maintenant mon invite de commande m'affiche : Argument "\n" isn't numeric in numeric "le" (<=) at perl3 line15, <STDIN> line 1.
          1. Remplace :
            $limite = <STDIN>;
            


            par :
            chomp($limite = <>)
            


            Désolé de te contre-dire jisisv, mais je pense que le problème semble venir de "\n" qui représente le saut de ligne (appuie sur la touche "Entrée" qui écrit le caractère à la ligne : "\n").
          2. @Utilisateur anonymeNon j'ai essayé de faire des modifications au niveau de "\n" mais se n'est pas le problème apparemment...
        2. Non cette fois le signe "<=" produit une erreur. Mais après quelques recherches, j'ai vue que les contextes numériques provoquent souvent des Bugs. Mais pour une quelconque raison...
          1. Non en fait j'ai réussi à faire afficher X lamas. Le décompte se fait. Mais reste encore à résoudre la $limite. le décompte ne s'arrête pas quand on appuie sur entrée.
          2. Modérateur
            Voir lignes 10-11: il faut tester la validité de l'entrée !