Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1458 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl - Débutant]Probleme de comparaison de 2 chaines

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl - Débutant]Probleme de comparaison de 2 chaines

n°1557679
floc12
Posté le 09-05-2007 à 23:08:27  profilanswer
 

bonjour,
débutant en perl depuis tres peu de temps, j'essaye de mettre en place un script permettant de récupérer mon adresse publique, et de la comparer à celle d'un fichier de configuration (vsftp).
 
Voici mon code :  
 

Code :
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. ################################
  5. ##### IP PUBLIQUE ACTUELLE #####
  6. ################################
  7. use LWP::Simple;
  8. my $page=get("http://192.168.1.1" );
  9. if ($page=~m/(\d+\.\d+\.\d+\.\d+)/)
  10. {
  11.         print "IP publique actuelle : $1\n";
  12. }
  13. my $ip=$1;
  14. ##################################
  15. ##### IP PUBLIQUE DU FICHIER #####
  16. ##################################
  17. my $ligne;
  18. my $nom_fichier="/etc/test.conf";
  19. $ligne = `grep -i "pasv_address" $nom_fichier`;
  20. my $file_ip;
  21. my $longueur_ip = length($ligne);
  22. $file_ip=substr($ligne,13,$longueur_ip-1);
  23. print "IP vsftpdae actuelle : $file_ip";
  24. ################################
  25. ##### COMPARAISON DES DEUX #####
  26. ################################
  27. my $res_cmp="égales";
  28. if (($file_ip ne $ip)==1)
  29. {
  30.         $res_cmp="différents";
  31. }
  32. print "Résultat : $res_cmp\n";


 
Le probleme viens lors de la comparaison, qui ne s'effectue pas correctement (toujours valeur a 0). Je suppose que c'est dû au type de "$1" (ip publique que je recupère).
Avez vous une idée ???
 
Merci
Ced

mood
Publicité
Posté le 09-05-2007 à 23:08:27  profilanswer
 

n°1557701
couak
Posté le 10-05-2007 à 00:46:58  profilanswer
 

obn à chaud comme ca, et sans le résultat à l'écran c'est un peu dur à débugguer

 

mais qques conseils pratiques pour perl :
1) évite les commandes systèmes sauf si tu ne peux pas le faire en perl
pour ta lecture de fichier, il est généralement conseillé d'ouvrir un file descriptor et de le stocker dans une liste, ce qui te facilitera les manipulations après coup

Code :
  1. open FILE, "/etc/test.conf";
  2. @lines = <FILE>;
  3. close FILE;
  4. @ip_match = grep /pasv_address/, @lines;


avec ce bout de code, tu auras les lignes contenant "pasv_address" dans un tableau, tu pourrais également pousser plus loin le vice en ne prenant pas en compte les lignes commentées, et autre exceptions qui pourraient t'arriver

 

2) utilises des regex plutôt que des substr, ca rendra ton truc plus souple, parce que là je sais pas trop ce que tu as récupéré ; un exemple con :

Code :
  1. #pasv_address                          192.168.1.1


sera récupérée par ta commande système grep, alors que c'est une ligne commentée
De plus, ton substring ne marchera pas à cause du # et des nombreux espaces entre le paramètre et sa valeur

 


sinon pour ton problème, tu utilises le bon opérateur ("ne" ) même si la condition est redondante => voici 3 lignes équivalentes :

Code :
  1. if (($file_ip ne $ip)==1) { ... }
  2. if ($file_ip ne $ip) { ... }
  3. unless ($file_ip eq $ip) { ... }


perso je préfère la dernière ligne, mais bon chacun ses goûts et sa manière de travailler

 

donc ton problème est peut-être dans les chaînes mêmes, peut-être as-tu un caractère pourri qui se balade (retour chariot, espace, ...)
essayes de débugguer, soit en faisant des affichage écrans plus visibles comme par exemple :

Code :
  1. print "xxxxx".$file_ip."xxxxx"

et là tu verras totu de suite si t'as un truc pourri qui se balade soit en utilisant le débuggeur perl (perl -d script.pl)

 

mais bon à priori ca a l'air bon, mais mon cerveau n'est pas un interpréteur perl avec je peux pas aller plus loin


Message édité par couak le 10-05-2007 à 00:47:43

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl - Débutant]Probleme de comparaison de 2 chaines

 

Sujets relatifs
problème avec des méthodes inlineProblème de compilation
C# - Windows Forms - problème affichage des formesprobleme combobox sous IE
Repérage de chaines de caractères dans arbre DOMProbleme avec Fenetre GLUT
probleme de formulaire généré en Javascript[ANTLR] SOS : Problème sur des caratères
[C+GTK] Scrollbar qui pose problèmecours de C++, problème !
Plus de sujets relatifs à : [Perl - Débutant]Probleme de comparaison de 2 chaines


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR