c'est pas trop porc ca ? [Perl] - Perl - Programmation
Marsh Posté le 12-08-2002 à 22:32:28
djtoz a écrit a écrit : sub verifip { if ($ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) { @liste = ($1,$2,$3,$4); foreach $t (@liste) { if ($t > 255) { return 1; } else { calcul(); } } } else { return 1; } } sub calcul { $a=($1*16777216); $b=($2*65536); $c=($3*256); $ipfinal=($a+$b+$c+$4); return 0; } |
Bon déjà, quand tu fais des fonctions, essaie d'utiliser des arguments et de récupérer ce que je renvoie la fonction au lieu d'utiliser des variables globales à tout va (d'ailleurs je ne suis même pas certain que ça marche).
Essaie ceci :
Code :
|
et donc quand tu appelles la fonction verifip, tu fais ainsi :
Code :
|
Enfin test de toute façon parce que bon je suis pas très réveillé là mais je crois pas qu'il y ai de méthode beaucoup plus rapide que ce que tu as fait ... peut-être une fonction déjà faite qui fait la même chose mais je ne la connais pas
Marsh Posté le 28-08-2002 à 10:43:00
plus j'avance dans mon bouqin et plus j'arrive a optimiser
j'en suis arrive a ca maintenant:
#!/usr/bin/perl -w
use strict;
while () {
print ("donne moi une ip a convertir:\n" );
chomp (my $ip = <STDIN> );
verifip($ip);
my ($good,$a,$b,$c,$d) = verifip($ip);
if ($good == 1) {
print ("voila ton ip converti: ".(($a*16777216) + ($b*65536) + ($c*256) + $d)." \(sympa\.\.\.\,non\?\)\n" );
}
else {
print ("c'est quoi cette ip \?\! o\_O\n" );
}
print ("encore une tite derniere (y/n)\?\n" );
chomp (my $test = <STDIN> );
unless ($test =~ /^y/i) {
print ("ok ben on arrete la...\n" );
exit;
}
}
sub verifip {
my ($ip) = @_;
my $good = 1;
if (my (@liste) = $ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) {
foreach (@liste) {
$good = 0 if ($_ > 255);
}
return ($good, @liste) if ($good);
}
return (0);
}
Marsh Posté le 08-09-2002 à 11:43:22
c vrai c mieu comme ca
perso juste avant le While()
j'aurais rajouté $|=1;
qui met le tampon de sorti en affichage direct, en gros ya pas de tampon, il affiche direct
car je l'ai testé sous Windows et il ne m'affiche "donne ton ip"
que quand je l'ai saisie
Sinon c cool mais a koi ca sert exactement ?
Marsh Posté le 13-09-2002 à 13:03:29
stef_dobermann a écrit a écrit : c vrai c mieu comme ca perso juste avant le While() j'aurais rajouté $|=1; qui met le tampon de sorti en affichage direct, en gros ya pas de tampon, il affiche direct car je l'ai testé sous Windows et il ne m'affiche "donne ton ip" que quand je l'ai saisie Sinon c cool mais a koi ca sert exactement ? |
ben c vrai que ca sert pas a grand chose a premiere vue ;p
mais je savais pas koi code alors j'ai fais ca
pis en fait now j'ai reutilise cette partie de code pour coder mon scanneur
car il doit scanner une plage ip
alors je la convertie kom ca, puis apres je n'est plus qu'a incrementer le numero obtenu
Marsh Posté le 16-09-2002 à 12:19:02
stef_dobermann a écrit a écrit : oué cool |
ba desole que ca te plaise pas...
moi je debute en perl, alors peut importe ce que je code, j'apprends...
Marsh Posté le 16-09-2002 à 13:31:27
djtoz a écrit a écrit : ba desole que ca te plaise pas... moi je debute en perl, alors peut importe ce que je code, j'apprends... |
et tes scann d'adresses IP, ça te sert à quoi au juste ???
Marsh Posté le 17-09-2002 à 16:41:58
Aricoh a écrit a écrit : et tes scann d'adresses IP, ça te sert à quoi au juste ??? |
j'ai fais un scanneur de faille IIS
Marsh Posté le 17-09-2002 à 17:45:00
djtoz a écrit a écrit : salut bon je debute en perl, j ai ecris un ti truc et voulais savoir si on pouvais l optimiser, pk si ca se trouve j'utilise 10 lignes de code alors qu'on pourrais faire en 2... en fait dans ce programme, on donne une ip, on verifie si le format de l 'ip est correct et on fais un ti calcul pour convertir l'ip. #!/usr/bin/perl -w while () { print ("donne ton ip:\n" ); chomp ($ip=<STDIN> ); verifip (); if (verifip()) { print ("c\'est quoi cette ip \?\n" ); } else { print ("voila le resultat: $ipfinal\n" ); } print ("encore une fois (y/n)\?\n" ); chomp ($test=<STDIN> ); if ($test =~ /^y/i) {} else { print ("ok ben on arrete la...\n" ); exit; } } sub verifip { if ($ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) { @liste = ($1,$2,$3,$4); foreach $t (@liste) { if ($t > 255) { return 1; } else { calcul(); } } } else { return 1; } } sub calcul { $a=($1*16777216); $b=($2*65536); $c=($3*256); $ipfinal=($a+$b+$c+$4); return 0; } |
tu fait deux fois appel a la methode verifip()!!
quel interet?
Marsh Posté le 24-10-2002 à 14:10:07
Meodudlye a écrit a écrit : Ca manque de GOTO |
des goto ... inculte, va !
Marsh Posté le 24-10-2002 à 16:15:45
Meodudlye a écrit a écrit : Ca manque de GOTO |
Marsh Posté le 24-10-2002 à 18:25:51
Meodudlye a écrit a écrit : Ca manque de GOTO |
tiens, tu viens sur prog maintenant ? cai la faite !
Marsh Posté le 25-10-2002 à 08:13:15
stef_dobermann a écrit a écrit : |
Marsh Posté le 25-10-2002 à 10:47:20
faut pas deconner quand meme, à l'heure ou l'on est, utiliser encore le GOTO
Marsh Posté le 25-10-2002 à 10:49:04
stef_dobermann a écrit a écrit : faut pas deconner quand meme, à l'heure ou l'on est, utiliser encore le GOTO |
Le goto, c'est de la grosse merde ! J'ai eu la malheureuse idée de vouloir analyser un code de 3000 lignes écrit en Basic-C (un vieux Basic). Avec + de 500 Goto et gosub disséminés vraiment partout dans le code, j'ai vite laissé tomber
Marsh Posté le 25-10-2002 à 11:46:00
outch, ca clame ya de koi
Marsh Posté le 25-10-2002 à 11:50:06
stef_dobermann a écrit a écrit : outch, ca clame ya de koi |
pour être honnète, j'ai commencé en info en apprenant le C tout seul, puis suis passé au Perl. A l'époque, n'ayant aucune formation info derrière moi, j'essayais tant bien que mal de me demmerder avec ma propre logique et c'est vrai que mes 1er codes en Perl, ben y avait quelques goto dedans, notamment un jeu dont le source représentait 1500 lignes.
Mais depuis j'ai pris d'labouteille et surtout, depuis que j'ai eu entre les mains CE code Basic C, ça m'a calmé à vie du goto
Marsh Posté le 25-10-2002 à 14:34:37
stef_dobermann a écrit a écrit : faut pas deconner quand meme, à l'heure ou l'on est, utiliser encore le GOTO |
il me semble que c'etait du 2nd degres, mais bon...
Marsh Posté le 25-10-2002 à 14:37:15
pospos a écrit a écrit : il me semble que c'etait du 2nd degres, mais bon... |
Ben ... Sachant que le goto est très bien géré sous Perl et que j'ai l'habitude de voir passer des sales codes écrits par de gros dégueulasses, ça n'était pas forcément du second degré ...
Quand je vois un collègue qui beugle après son micro car son programme ne fait pas ce qu'il attend de lui, et que le bonhomme n'aime pas utiliser "use strict" et que son erreur est due à un nom de variable mal orthographié, j'ai une soudaine envie de sortir la boite à baffes
Marsh Posté le 25-10-2002 à 14:41:22
he les gars, je vois que vous etes presque les deux seuls à tourner sur le sujet ici, alors vous pourriez repondre à mon post sur Siemens et ActivePerl?
jsute faire le test avec votre interpreteur perl voir ce que ca donne
http://forum.hardware.fr/forum2.ph [...] subcat=392
Marsh Posté le 25-10-2002 à 14:46:11
j'utilise ActivePerl sous Win98, je c pas si ca va changer gras chose !!
mais bon
Marsh Posté le 25-10-2002 à 14:52:36
Aricoh a écrit a écrit : Ben ... Sachant que le goto est très bien géré sous Perl et que j'ai l'habitude de voir passer des sales codes écrits par de gros dégueulasses, ça n'était pas forcément du second degré ... Quand je vois un collègue qui beugle après son micro car son programme ne fait pas ce qu'il attend de lui, et que le bonhomme n'aime pas utiliser "use strict" et que son erreur est due à un nom de variable mal orthographié, j'ai une soudaine envie de sortir la boite à baffes |
c vrai fo pas deconner quand meme.
Perso je m'en fou de savoir comment programme tel ou tel personne, mais quand on me demande mon avis, je dit clairement que le GOTO fo plus l'utiliser ou du moins s'en abstenir
on est pas des porc bordel, je cherche juste à faire du code propre et facile à relire pour le programmeur et pour les autres
Marsh Posté le 25-10-2002 à 14:56:02
en simplifiant un peu, l'autre jour un collègue s'est pointé pour me demander de l'aide sur un prog, il avait une variable qui aurait du contenir une valeur et qui était undef
il était parti sur une variable que j'appelerai très originalement $toto , lui avait fait faire plein de trucs pas possibles dans plein de routines différentes et tout d'un coup bêtement en fin de code, môsieur fait un print $tooto
j'ai pris son code, j'ai rajouté un use strict en début de code et après, "tu te demmerdes mon pote" ! fo pas pousser
Marsh Posté le 25-10-2002 à 15:09:30
Aricoh a écrit a écrit : en simplifiant un peu, l'autre jour un collègue s'est pointé pour me demander de l'aide sur un prog, il avait une variable qui aurait du contenir une valeur et qui était undef il était parti sur une variable que j'appelerai très originalement $toto , lui avait fait faire plein de trucs pas possibles dans plein de routines différentes et tout d'un coup bêtement en fin de code, môsieur fait un print $tooto j'ai pris son code, j'ai rajouté un use strict en début de code et après, "tu te demmerdes mon pote" ! fo pas pousser |
c clair, utilisons les outils qui existe, on va pas réinventer la roue a chaque programme
et plus c l'erreur la plus basic qui existe et que l'on fait, mais surtout c la plus chiante et difficile à détecter
Marsh Posté le 25-10-2002 à 15:14:01
stef_dobermann a écrit a écrit : c clair, utilisons les outils qui existe, on va pas réinventer la roue a chaque programme et plus c l'erreur la plus basic qui existe et que l'on fait, mais surtout c la plus chiante et difficile à détecter |
c'est pour ça que j'utilise en plus SciTE pour composer mes jolies lignes de code
SciTE complète (un peu comme sous VB) les noms que tu tapes, ça m'épargne mes p'tits doigts et d'éventuelles fautes de frappe
Marsh Posté le 25-10-2002 à 15:18:42
Aricoh a écrit a écrit : en simplifiant un peu, l'autre jour un collègue s'est pointé pour me demander de l'aide sur un prog, il avait une variable qui aurait du contenir une valeur et qui était undef il était parti sur une variable que j'appelerai très originalement $toto , lui avait fait faire plein de trucs pas possibles dans plein de routines différentes et tout d'un coup bêtement en fin de code, môsieur fait un print $tooto j'ai pris son code, j'ai rajouté un use strict en début de code et après, "tu te demmerdes mon pote" ! fo pas pousser |
au fait qu'est ce que ca rajoute le "use strict" ?
parce que là j'ai pas de doc sous la main et
je l'utilise tout le temps
Marsh Posté le 25-10-2002 à 15:20:07
Aricoh a écrit a écrit : c'est pour ça que j'utilise en plus SciTE pour composer mes jolies lignes de code SciTE complète (un peu comme sous VB) les noms que tu tapes, ça m'épargne mes p'tits doigts et d'éventuelles fautes de frappe |
je ne v pas jusque la mais ca a l'air d'etre cool, c sous Win ou Linux ? gratuit ou piraté ? et ca execute les scripts ou pas ?
perso j'utilise UltraEdit avec lui je peut executer mes script et recupérer la sortie écran
Marsh Posté le 25-10-2002 à 15:22:03
stef_dobermann a écrit a écrit : je ne v pas jusque la mais ca a l'air d'etre cool, c sous Win ou Linux ? gratuit ou piraté ? et ca execute les scripts ou pas ? perso j'utilise UltraEdit avec lui je peut executer mes script et recupérer la sortie écran |
va voir sur www.scintilla.org, c'est un freeware sous Linux + Win32, tu peux effectivement lancer ton script via SciTE, je n'ai par contre pas réussi à faire en sorte d'en récupérer le contenu directement dans SciTE comme le font TextPad ou UltraEdit
Marsh Posté le 25-10-2002 à 15:25:31
mici, je v voir ca desuite !!
Marsh Posté le 25-10-2002 à 15:25:40
il est sympa cet editeur
mais la grosse barre jaune d'ultraedit me manquerait trop...
circeedevalette =>
Perl in a nutshell:
Citation : |
Marsh Posté le 25-10-2002 à 15:27:19
d'ailleurs c'est pas plutot le -w qui permet de detecter les variables utilisée qu'une seule fois?
Marsh Posté le 25-10-2002 à 15:27:30
circeedevalette a écrit a écrit : au fait qu'est ce que ca rajoute le "use strict" ? parce que là j'ai pas de doc sous la main et je l'utilise tout le temps |
C'est déjà très bien que tu l'utilise !
"Use strict" est une règle de conduite qui t'oblige à déclarer tes variables en les précédant d'un "my", d'un "local" ou d'un "our" (le my étant le + souvent employé).
Ca permet au compilo interne de Perl de t'avertir si tu t'es gourré en tapant un nom de variable, mais ça va bcp + loin encore.
Marsh Posté le 25-10-2002 à 15:29:00
pospos a écrit a écrit : d'ailleurs c'est pas plutot le -w qui permet de detecter les variables utilisée qu'une seule fois? |
j'utilise le flag -w uniquement lors de mes tests, avant la mise en prod' effective du programme
ça me permet d'apprendre parfois que j'ai ouvert un fichier en écriture et que, comme un thon, j'écris rien dedans
Marsh Posté le 25-10-2002 à 15:32:07
ou que je declare des varibles, qui ne sont jamais utilisé !!
aprés optimisation du code
Marsh Posté le 25-10-2002 à 15:32:43
ouai en fait le -w te dis un truc du genre 'variable used only once at...' si tu te goure dans le nom d'une variable, alors qu'avec strict il te dira carrement que cette "nouvelle" variable est pas déclarée, donc ca reviendra au meme
Marsh Posté le 25-10-2002 à 15:36:39
ya presque du monde sur "le forum PERL" aujourd'hui
Marsh Posté le 25-10-2002 à 15:37:08
Marsh Posté le 25-10-2002 à 15:41:41
du coup ya plus personne
Marsh Posté le 10-08-2002 à 12:00:41
salut
bon je debute en perl, j ai ecris un ti truc et voulais savoir si on pouvais l optimiser, pk si ca se trouve j'utilise 10 lignes de code alors qu'on pourrais faire en 2...
en fait dans ce programme, on donne une ip, on verifie si le format de l 'ip est correct et on fais un ti calcul pour convertir l'ip.
#!/usr/bin/perl -w
while () {
print ("donne ton ip:\n" );
chomp ($ip=<STDIN> );
verifip ();
if (verifip()) {
print ("c\'est quoi cette ip \?\n" );
}
else {
print ("voila le resultat: $ipfinal\n" );
}
print ("encore une fois (y/n)\?\n" );
chomp ($test=<STDIN> );
if ($test =~ /^y/i) {}
else {
print ("ok ben on arrete la...\n" );
exit;
}
}
sub verifip {
if ($ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) {
@liste = ($1,$2,$3,$4);
foreach $t (@liste) {
if ($t > 255) {
return 1;
}
else {
calcul();
}
}
}
else {
return 1;
}
}
sub calcul {
$a=($1*16777216);
$b=($2*65536);
$c=($3*256);
$ipfinal=($a+$b+$c+$4);
return 0;
}
Message édité par djtoz le 11-08-2002 à 13:50:41