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 !
[^] # Re: Pouvoir sans limite : le script
Posté par Sytoka Modon (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 :
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
$totodans un testif () {}. Si le test n'est pas bon, alors on peut alors avoir cette variable$totoavec la valeur de la boucle précédente, alors qu'avec une déclaration dans la boucle,$totovaut 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 lemy $toto;de Perl d'autant plus que s'il n'est pas mis, Perl gueule et refuse d’exécuter le script (avecuse 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 !