[Perl] Réaction incompréhensible après substitution de chaîne ! URGENT

Réaction incompréhensible après substitution de chaîne ! URGENT [Perl] - Perl - Programmation

Marsh Posté le 17-02-2005 à 10:38:42    

bonjour à tous, voila je reprend le script d'un stagiaire en Perl. Il s'agit d'un script qui récupère l'@ MAC tapé par l'utilisateur dans un formulaire et qui recherche l'existence de cette @ MAC dans un fichier .txt !  
Je dois faire en sorte que le script tolère les séparateurs "espace", ":" et "-" taper par l'utilisateur lorsqu'il rentre l'@ MAC dans le formulaire. Comme les @ MAC sont stocké avec le séparateurs "-" dans le fichier .txt j'utilise simplement la substitution de chaîne avec expression régulière : "$mac =~s/\+|%3A/-/g;"
 
Cette substitution fonctionne car je vérifie le contenu de $mac mais je constate que le prog réagit de manière incohérente car il ne veut plus exécuter l'instruction après le if de "if ($tabip[$i]=~m/$ip/) {$t++;}" qui se trouve à la ligne 160 tandis que si il n'y a pas de substitution faite alors il l'exécute ce "if" et m'affiche l'@ MAC dans un tableau.
 
Voici le code du script:

Code :
  1. #!C:\perl\bin\perl.exe -w
  2. #on indique ici le chemin vers l'interpréteur Perl
  3. print "Content-type: text/html\n\n";   #indique qu'on va utiliser des balises HTML en vue d'executer le script à l'aide d'un navigateur web
  4. print "<HTML>";
  5. #use strict;                   # oblige à déclarer toutes les variables utilisées; contraignant mais plus propre
  6. use forme;                    # module que j'ai écrit dédié à la mise en forme de l'interface HM (interface web en l'occurence)
  7. use URI::Escape;              # module intégré à Perl qui permet d'échapper les caractères spéciaux
  8. ############################# déclaration des variables ####################################################
  9. my $tiret;
  10. my $l;                                                                         # variable de parcours de fichier TXT
  11. my $i;                                                                         # variable de boucle
  12. my $in;                                                                        # données passées par le formulaire
  13. my $nom;                                                                       # variable intermédiaire
  14. my ($mac,$ip);                                                                 # @mac et @ip fourni par l'utilisateur ds le formulaire recherche.pl
  15. my $ipv;                                                                       # copie de $ip avant échappement des points de $ip
  16. my ($t,$s);                                                                    # variables de controle pour la recherche de résultats ds ARP.txt
  17. my @ligne;                                                                     # tableau dont chaque ligne correspond à une ligne du fichier ARP.txt
  18. my (@hop,@champs);                                                             # tableaux intermédiaires
  19. my (@tabcompt,@tabmac,@tabip,@tabhost,@tabport,@tabswit,@tabvlan,@tabind);     # tableaux contenant respectivement le compteur pour décler les anciennes mac,
  20.                                                                                 # @mac,@ip,hostname,nom du port,switch, et vlan (mais était-il nécessaire de le préciser? ^^)
  21. ############################# affiche l'en tête de la page web (titre, logo) ################################
  22. forme::haut();
  23. ############################# ouverture des fichiers ARP successifs! #########################
  24. $c=0;
  25. open(FIC,"<../sites.txt" ) || die "Problème à l\'ouverture : $!";
  26. while (defined ($l=<FIC> ))
  27. {
  28. chomp $l;
  29. $site[$c]=$l;
  30. $c++;
  31. }
  32. close FIC;
  33. ############################# ouverture des fichiers ARP successifs! #########################
  34. $c=0;
  35. open(FIC,"<../sites.txt" ) || die "Problème à l\'ouverture : $!";
  36. while (defined ($l=<FIC> ))
  37. {
  38. chomp $l;
  39. $site[$c]=$l;
  40. $c++;
  41. }
  42. close FIC;
  43. ############################# récupération des informations du formulaire : @mac/@ip ################################
  44. read(STDIN, $in, $ENV{CONTENT_LENGTH});    # ON RECUPERE LES INFORMATIONS DU FORMULAIRE
  45. @champs = split(/&/,$in);
  46. print "$in <br>";
  47. ($nom, $mac) = split(/=/,$champs[0]);
  48. print "nom: $nom,   mac: $mac<br>";
  49. $mac =~s/\+/-/g; # il y a bien un anti-slash juste avt le "+" meme si il  ne se voit pas ici
  50. #chomp($mac);
  51. print "mac après subtitution: $mac<br>";
  52. @hop=split(//,$mac);
  53. ($nom, $ip) = split(/=/,$champs[1]);
  54. $mac=lc($mac);        # on met la mac fournie par l'utilisateur en minuscule pour coller avec notre BDD ARP.txt
  55. print "\@MAC minuscule: $mac et ip= $ip<br>";
  56. $ipv=$ip;
  57. @hop=split(/\./,$ip);   # petit tour de passe passe pour avoir l'ip sous une bonne forme
  58. $ip=join('\.',@hop);    # (il faut échapper les points pour que ca fonctionne : 126.43 devient 126\.43 par exemple)
  59. ############################# ouverture du fichier ARP.txt et extraction des données ds des tableaux ################################
  60. $i=0;
  61. for ($c=0;$c<@site-1;$c++)
  62. {
  63. open(FIC,"<../ARP-".$site[$c].".txt" ) || die "Problème à l\'ouverture : $!";
  64. while (defined ($l=<FIC> ))
  65. {
  66. chomp $l;
  67. $ligne[$i]=$l;
  68. @hop=split(/:/,$l);
  69. if (defined($hop[0])) { $tabcompt[$i]=$hop[0]; } else { $tabcompt[$i]=""; }
  70. if (defined($hop[1])) { $tabind[$i]=$hop[1]; } else { $tabind[$i]=""; }
  71. if (defined($hop[2])) { $tabmac[$i]=$hop[2]; } else { $tabmac[$i]=""; }
  72. if (defined($hop[3])) { $tabip[$i]=$hop[3]; } else { $tabip[$i]=""; }
  73. if (defined($hop[4])) { $tabhost[$i]=$hop[4]; } else { $tabhost[$i]=""; }
  74. if (defined($hop[5])) { $tabbios[$i]=$hop[5]; } else { $tabbios[$i]=""; }
  75. if (defined($hop[6])) { $tabname[$i]=$hop[6]; } else { $tabname[$i]=""; }
  76. if (defined($hop[7])) { $tabport[$i]=$hop[7]; } else { $tabport[$i]=""; }
  77. if (defined($hop[8])) { $tabswit[$i]=$hop[8]; } else { $tabswit[$i]=""; }
  78. if (defined($hop[9])) { $tabvlan[$i]=$hop[9]; } else { $tabvlan[$i]=""; }
  79. $tabsite[$i]=$site[$c];
  80. $i++;
  81. }
  82. close FIC || die "Problème à la fermeture : $!";
  83. }
  84. ############################# affichage des résultats trouvés ################################
  85. if (-d "../Recherche" )
  86. {}
  87. else
  88. {mkdir("../Recherche","077" );}
  89. open(FIC,">../Recherche/mac ".$mac." ip ".$ipv.".txt" ) || die "Problème à l\'ouverture : $!";
  90. print "<br> ";
  91. print "mac : $mac<br>";
  92. print "<CENTER><font size=3> résultat de la recherche pour \@mac: ".$mac." et \@ip: ".$ipv."<br><br><br></font></CENTER>";
  93. print (FIC "résultat de la recherche pour \@mac: ".$mac." et \@ip: ".$ipv."\n \n" );
  94. print "<font size=3><center> <a href='../Networks Inventory/Recherche/mac ".$mac." ip ".$ipv.".txt'> Exporter le résultat</a><br><br> </center><br>";
  95. print "<table border=1 align='center' cellpadding=3>";
  96. print "<tr>";
  97. print "<td><font size=2><center> site </td></font></center>";
  98. print "<td><font size=2><center> \@mac </td></font></center>";
  99. print "<td><font size=2><center> \@ip </td></font></center>";
  100. print "<td><font size=2><center> hostname </td></font></center>";
  101. print "<td><font size=2><center> NBname </td></font></center>";
  102. print "<td><font size=2><center> Username </td></font></center>";
  103. print "<td><font size=2><center> port </td></font></center>";
  104. print "<td><font size=2><center> switch </td></font></center>";
  105. print "<td><font size=2><center> vlan </td></font></center>";
  106. print "</tr>";
  107. for ($i=0;$i<@ligne;$i++)
  108. {
  109.       $s=0;
  110.       $t=0;
  111.       if (defined($mac))
  112.       {
  113.       $s++;
  114.       print "tabmac[$i] : $tabmac[$i], mac: $mac<br>";
  115.       if ($tabmac[$i]=~m/$mac/) {$t++;if ($tabmac[$i] cmp $mac){print "sont différents";}print"mac trouvé avec \$t= $t , \$i= $i et \$s= $s<br>";}
  116.       }
  117.       if (defined($ip))
  118.       {
  119.       $s++;
  120.       print "tabip[$i] : $tabip[$i], ip: $ip<br>";
  121.       if ($tabip[$i]=~m/$ip/) {$t++;}
  122.       }
  123.       print "avt le if \$s = $s et \$t = $t<br>";
  124.       if ($s==$t)
  125.       {
  126.       print "apres le if \$s = $s et \$t = $t<br>";
  127.       print "<tr>";
  128.       print "<td><font size=2>".$tabsite[$i]."</td></font>";
  129.       print "<td><font size=2>".$tabmac[$i]."</td></font>";
  130.       print "<td><font size=2>".$tabip[$i]."</td></font>";
  131.       print "<td><font size=2>".$tabhost[$i]."</td></font>";
  132.       print "<td><font size=2>".$tabbios[$i]."</td></font>";
  133.       print "<td><font size=2>".$tabname[$i]."</td></font>";
  134.       print "<td><font size=2>".$tabport[$i]."</td></font>";
  135.       print "<td><font size=2>".$tabswit[$i]."</td></font>";
  136.       print "<td><font size=2>".$tabvlan[$i]."</td></font>";
  137.       print "</tr>";
  138.       print (FIC $tabsite[$i]."\t".$tabmac[$i]."\t".$tabip[$i]."\t".$tabhost[$i]."\t".$tabbios[$i]."\t".$tabname[$i]."\t".$tabport[$i]."\t".$tabswit[$i]."\t".$tabvlan[$i]."\n" );
  139.       }
  140. }
  141. print "</table>";
  142. close FIC;
  143. forme::bas();
  144. print "</HTML>";


 
voici un exemple du fichier .txt:
 

Code :
  1. 0:1:00-30-f1-7d-97-20:192.168.201.101::::::
  2. 0:1:00-20-e0-6f-cb-e1:::::mod. 1, port 1:OmniStack 6124 n°1:Vlan 1
  3. 0:1:00-01-f4-d6-21-13:10.40.190.1::::::


 
Voila je ne comprend pas la reaction du prog   :fou: , si quelqu'un a une solution ou meme une explication plz !?!?
 


Message édité par Gouki19 le 17-02-2005 à 10:58:55
Reply

Marsh Posté le 17-02-2005 à 10:38:42   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed