• [^] # Re: Pouvoir sans limite : le script

    Posté par (site web personnel) . En réponse au journal fusebox : transformations composées sur des systèmes de fichiers FUSE. Évalué à 4.

    Je n'ai plus en tête des bouts de code ou je me suis fait piéger. Mais des bouts de code avec variables locales à la boucle, c'est hyper classique. Exemple :

    INIT_EACH_SWITCH:
    for my $sw (@SWITCH_LIST) {
     my ($session, $error) = Net::SNMP->session($sw);
     print "$error\n" if $error;
     ...
    

    Les variables $session et $error sont locales à la boucle et ne sont pas définies avant. Il n'y a aucun risque que leurs valeurs proviennent du passage précédent.

    Je me souvient que dans certains cas, il met arrivé d'initialiser la valeur d'une variable, disons $toto dans un test if () {}. Si le test n'est pas bon, alors on peut alors avoir cette variable $toto avec la valeur de la boucle précédente, alors qu'avec une déclaration dans la boucle, $toto vaut systématiquement 0.

    En Python, j'ai aussi eu ce genre d'erreur. En début de boucle, il faut systématiquement écrire toto=0. En cas d'oubli, le programme fonctionne cependant et parfois sors des valeurs aberrantes. Il n'est pas toujours évident de détecter cet oubli. Je trouve donc beaucoup plus parlant le my $toto; de Perl d'autant plus que s'il n'est pas mis, Perl gueule et refuse d’exécuter le script (avec use strict;).

    Je suis loin d'être parfait et je code (malheureusement) avec régulièrement des erreurs... Si le langage m'évite des erreurs sur les boucles, tant mieux !