[Perl] c'est pas trop porc ca ?

c'est pas trop porc ca ? [Perl] - Perl - Programmation

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
Reply

Marsh Posté le 10-08-2002 à 12:00:41   

Reply

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 :
  1. sub verifip
  2. {
  3.   if (my @liste = $_[0] =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
  4.   {
  5.     foreach my $t (@liste) {
  6.       if ($t > 255) { return (true, false); };
  7.     }
  8.     return (false, &calcul(@liste));
  9.   }
  10.   else { return (true, false); };
  11. }
  12. sub calcul
  13. {
  14.   $a=($_[0]*16777216);
  15.   $b=($_[1]*65536);
  16.   $c=($_[2]*256);
  17.   return $a+$b+$c+$_[5];
  18. }


 
et donc quand tu appelles la fonction verifip, tu fais ainsi :

Code :
  1. my ($err, $ipfinal) = &verifip ($ip);
  2. if ($err)
  3. {
  4.   print "Ip non valide";
  5. } else {
  6.   print "Résultat : $ipfinal";
  7. }


 
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 :)
 

Reply

Marsh Posté le 28-08-2002 à 10:43:00    

plus j'avance dans mon bouqin et plus j'arrive a optimiser :p
 
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);
        }

Reply

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 ?


---------------
Tout à commencé par un rêve...
Reply

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

Reply

Marsh Posté le 13-09-2002 à 20:45:04    

oué cool


---------------
Tout à commencé par un rêve...
Reply

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...


Message édité par djtoz le 16-09-2002 à 12:19:22
Reply

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 ???   :heink:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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 ???   :heink:  




 
j'ai fais un scanneur de faille IIS

Reply

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?

Reply

Marsh Posté le 17-09-2002 à 17:45:00   

Reply

Marsh Posté le 24-10-2002 à 13:59:09    

Ca manque de GOTO

Reply

Marsh Posté le 24-10-2002 à 14:10:07    

Meodudlye a écrit a écrit :

Ca manque de GOTO



des goto ... inculte, va !  :na:  :D


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 24-10-2002 à 16:15:45    

Meodudlye a écrit a écrit :

Ca manque de GOTO




[:raphy11]


---------------
Tout à commencé par un rêve...
Reply

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 !

Reply

Marsh Posté le 25-10-2002 à 08:13:15    

stef_dobermann a écrit a écrit :

 
[:raphy11]


:jap:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 25-10-2002 à 10:47:20    

faut pas deconner quand meme, à l'heure ou l'on est, utiliser encore le GOTO :ouch:


---------------
Tout à commencé par un rêve...
Reply

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 :ouch:  



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  :(


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 25-10-2002 à 11:46:00    

:eek2: outch, ca clame ya de koi  :pt1cable:


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 25-10-2002 à 11:50:06    

stef_dobermann a écrit a écrit :

 :eek2: outch, ca clame ya de koi  :pt1cable:  



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  :lol:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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 :ouch:  




 
il me semble que c'etait du 2nd degres, mais bon...

Reply

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  :D


Message édité par Aricoh le 25-10-2002 à 14:37:49

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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 :jap:
 
http://forum.hardware.fr/forum2.ph [...] subcat=392


Message édité par pospos le 25-10-2002 à 14:42:04
Reply

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


---------------
Tout à commencé par un rêve...
Reply

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  :D




 
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 :lol:  
on est pas des porc bordel, je cherche juste à faire du code propre et facile à relire pour le programmeur et pour les autres


---------------
Tout à commencé par un rêve...
Reply

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  :D , 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


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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  :D , 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  :fou:


---------------
Tout à commencé par un rêve...
Reply

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  :fou:  



c'est pour ça que j'utilise en plus SciTE pour composer mes jolies lignes de code  :D  
 
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


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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  :D , 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  

Reply

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  :D  
 
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


---------------
Tout à commencé par un rêve...
Reply

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


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 25-10-2002 à 15:25:31    

mici, je v voir ca  desuite !!


---------------
Tout à commencé par un rêve...
Reply

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 :


Strict
 
Pragma for doing strict error checking within the current block. Can be turned off by prefixing with no:  
 
use strict 'vars';  
...  
no strict 'vars';
Provides three kinds of restriction:  
strict 'refs'
Generates runtime error if you use any symbolic references.
 
strict 'subs'
Generates compile-time error if you use a bareword identifier that's not a predeclared subroutine.
 
strict 'vars'
Generates compile-time error if you access a variable that wasn't declared via my, isn't fully qualified, or wasn't imported.
 
 
use strict by itself (with no import list) is the most restrictive, causing all possible restrictions to be imposed.
 

Reply

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?

Reply

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.


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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  :pt1cable:  :D


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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  :D


---------------
Tout à commencé par un rêve...
Reply

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
 

Reply

Marsh Posté le 25-10-2002 à 15:36:39    

ya presque du monde sur "le forum PERL" aujourd'hui  :lol:  


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 25-10-2002 à 15:37:08    

:D


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 25-10-2002 à 15:41:41    

du coup ya plus personne :cry:


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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