Print invisible dans le boucle while en Perl
Résolu
farah
-
farah -
farah -
Bonjour,
j'ai fait un script en Perl qui vas lance une boucle qui utilise un snmpwalk . Je ne comprends pas pourquoi les print à l'intérieur de la boucle while ( while ($j=0){) ne s'affichent pas, alors que quand je la supprime j'ai le résultats suivant:
voip ~ # ./test_RTT1.pl
UCD-SNMP-MIB::ucdavis.52.101.1 = STRING: "17"
le RTT est de : "17"
la valeur 1500 est eliminee, on a un RTT de taille 1
la moyenne du RTT est de :17
Ci-dessous mon script:
#!/usr/bin/perl
#$i=0;
$j = 0;
while ($j=0){
sleep 5;
#system ("/usr/bin/snmpwalk -c public -v 1 192.168.0.13 .1.3.6.1.4.1.2021.52.101.1");
$SNMP = `/usr/bin/snmpwalk -c public -v 1 192.168.0.13 .1.3.6.1.4.1.2021.52.101.1`;
print "$SNMP\n";
@RTT1 = split (/ /, $SNMP);
$RTT = @RTT1 [3];
print "le RTT est de : $RTT \n";
@cols = split (/"/, $RTT);
if (@cols[1] != 1500){
push (@RTTf, @cols[1]);
}
$sizef = scalar @RTTf;
print "On a $sizef valeurs de RTT \n";
$moyenne=0; }
$moyenne = $moyenne / $sizef;
print "la moyenne du RTT est de :$moyenne \n";
}
Quelqu'un comprend pourquoi les print ne s'affichent pas?
for ($i = 0; $i < $sizef; $i++){
$moyenne = $moyenne + @RTTf[$i];
j'ai fait un script en Perl qui vas lance une boucle qui utilise un snmpwalk . Je ne comprends pas pourquoi les print à l'intérieur de la boucle while ( while ($j=0){) ne s'affichent pas, alors que quand je la supprime j'ai le résultats suivant:
voip ~ # ./test_RTT1.pl
UCD-SNMP-MIB::ucdavis.52.101.1 = STRING: "17"
le RTT est de : "17"
la valeur 1500 est eliminee, on a un RTT de taille 1
la moyenne du RTT est de :17
Ci-dessous mon script:
#!/usr/bin/perl
#$i=0;
$j = 0;
while ($j=0){
sleep 5;
#system ("/usr/bin/snmpwalk -c public -v 1 192.168.0.13 .1.3.6.1.4.1.2021.52.101.1");
$SNMP = `/usr/bin/snmpwalk -c public -v 1 192.168.0.13 .1.3.6.1.4.1.2021.52.101.1`;
print "$SNMP\n";
@RTT1 = split (/ /, $SNMP);
$RTT = @RTT1 [3];
print "le RTT est de : $RTT \n";
@cols = split (/"/, $RTT);
if (@cols[1] != 1500){
push (@RTTf, @cols[1]);
}
$sizef = scalar @RTTf;
print "On a $sizef valeurs de RTT \n";
$moyenne=0; }
$moyenne = $moyenne / $sizef;
print "la moyenne du RTT est de :$moyenne \n";
}
Quelqu'un comprend pourquoi les print ne s'affichent pas?
for ($i = 0; $i < $sizef; $i++){
$moyenne = $moyenne + @RTTf[$i];
A voir également:
- Print invisible dans le boucle while en Perl
- Print artist - Télécharger - Loisirs créatifs
- Clé usb invisible - Guide
- Print pratic - Télécharger - Photo & Graphisme
- Directory list & print - Télécharger - Divers Utilitaires
- Print manager - Télécharger - Suite bureautique
2 réponses
Normal !!!!!!
($j = 0) vaut ... zéro ... donc ... la boucle n'est jamais exécutée ... CQFD ... Perl a toujours raison !
($j = 0) vaut ... zéro ... donc ... la boucle n'est jamais exécutée ... CQFD ... Perl a toujours raison !
Salut,
@RTT1 = split (/ /, $SNMP);
$RTT = @RTT1 [3];
Ce n'est pas plutôt ?
Tu peux aussi écrire au lieu de
@RTT1 = split (/ /, $SNMP);
$RTT = @RTT1 [3]; tout simplement
Tu peux écrire
@RTT1 = split (/ /, $SNMP);
$RTT = @RTT1 [3];
Ce n'est pas plutôt ?
@RTT1 = split (/ /, $SNMP); $RTT = $RTT1 [3];
Tu peux aussi écrire au lieu de
@RTT1 = split (/ /, $SNMP);
$RTT = @RTT1 [3]; tout simplement
$RTT = (split / /, $SNMP)[3];Pareil
@cols = split (/"/, $RTT); if ($cols[1] != 1500){ push (@RTTf, $cols[1]); }
Tu peux écrire
while ($j==0)mais je ne vois pas la condition d'arrêt de la boucle
Merci lami20j pour ta réponse.
En fait $RTT = $RTT1 [3]; et $RTT = @RTT1 [3]; revient au même j'ai essayé avec les deux.
Sinon j'ai testé while ($j==0) et les print s'affichent maintenant c'est super.
C'est juste la boucle while ne s'arrête pas j'ai oublié de mettre la condition d'arrêt.
Merci beaucoup pour ton aide
En fait $RTT = $RTT1 [3]; et $RTT = @RTT1 [3]; revient au même j'ai essayé avec les deux.
Sinon j'ai testé while ($j==0) et les print s'affichent maintenant c'est super.
C'est juste la boucle while ne s'arrête pas j'ai oublié de mettre la condition d'arrêt.
Merci beaucoup pour ton aide
Re,
Oui, je sais que ça marche, mais il faut apprendre être un peu discipliné en Perl.
Mais après le shebang use strict;use warnings; et tu auras des surprises ;-)
Ensuite pourquoi utiliser un tableau quand tu peux récuperer la variable avec
Mais bon, c'est juste l'histoire d'avoir un tableau qui n'est pas vraiment nécessaire
Oui, je sais que ça marche, mais il faut apprendre être un peu discipliné en Perl.
Mais après le shebang use strict;use warnings; et tu auras des surprises ;-)
Ensuite pourquoi utiliser un tableau quand tu peux récuperer la variable avec
$RTT = (split / /, $SNMP)[3];
Mais bon, c'est juste l'histoire d'avoir un tableau qui n'est pas vraiment nécessaire
Ca marche peut-être, mais ce n'est pas pour ça que c'est correct; si ça marche c'est parce que Perl, sur ce coup-là, est très conciliant.
Lami20j a raison, il vaut mieux mettre:
Dans l'autre cas:
@RTT1 [3] équivaut à ($RTT1 [3]), j'ai mis des parenthèses car nous sommes dans un contexte de liste que Perl va ensuite transformer en un contexte scalaire puisque assigné à $RTT.
Vu la subtilité ?
Lami20j a raison, il vaut mieux mettre:
$RTT = $RTT1 [3];car nous sommes dans un contexte scalaire.
Dans l'autre cas:
@RTT1 [3] équivaut à ($RTT1 [3]), j'ai mis des parenthèses car nous sommes dans un contexte de liste que Perl va ensuite transformer en un contexte scalaire puisque assigné à $RTT.
Vu la subtilité ?
Pour moi au contraire vu que $j=0, la boucle while est toujours vraie et donc elle s'execute continuellement.
Qu'est ce que je dois faire pour corriger ce problème?
Merci