[Perl] use strict !!!

use strict !!! [Perl] - Perl - Programmation

Marsh Posté le 06-09-2003 à 01:02:38    

En voyent les bouts de codes dans les differents post j'ai l'impression que personne n'utilise le pragma strict!
 
c'est super important, et meme si ca peu paraitre un peu chiant au debut (il faut declarer toutes ses variables) ca aide vraiment à eviter les bugs.
warnings (ou -w) c'est un peu different pasque parfois on veux pouvori bidouiller en paix, mais le strict ya clairement aucune contrindication. Au pire un petit 'no strict "ref"' pour construire dynamquelment des variables ou appels de fonction (avec ${}) et ca roule dans tous les cas
 
alors use strict!


Message édité par pospos le 06-09-2003 à 01:03:01
Reply

Marsh Posté le 06-09-2003 à 01:02:38   

Reply

Marsh Posté le 06-09-2003 à 04:06:33    

mon 1er script perl je l'avais pas(connaissait pas non plus)
 
depuis, sur tout mes cgi au boulot c mis


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 08-09-2003 à 09:18:23    

Pospos, si si nous sommes plusieurs à utiliser le fameux 'use strict', mais tu fais bien de le rappeler pour tous les p'tits novices qui passeraient ici :)  
 
Perso, je l'utilise avec mes propres scripts depuis que je programme en Perl. J'utilise également le flag -w.


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

Marsh Posté le 08-09-2003 à 09:29:39    

Le tutorial que j'ai trouvé sur le net n'en parle pas. Ca marche comment ?


---------------
Prison d'été, prison d'hiver, prison d'automne et de printemps, bagne pour petits et grands - Prévert, Le Roi et l'Oiseau
Reply

Marsh Posté le 08-09-2003 à 09:51:04    

Marnie a écrit :

Le tutorial que j'ai trouvé sur le net n'en parle pas. Ca marche comment ?


 
Petit exemple sans 'use strict' :

Code :
  1. #!/usr/bin/perl
  2. $toto = $titi = $tata = 3;
  3. print $toto;


 
Petit exemple avec :

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. my ($toto, $titi, $tata);
  4. $toto = $titi = $tata = 3;
  5. print $toto;


 
Si, dans le premier exemple, j'avais fait ceci :

Code :
  1. print $Ttoto;


Celà n'aurait occasionné aucune alerte mais comme tu peux t'en douter, $Ttoto contenant une faute de frappe, il s'agissait d'une nouvelle variable, non initialisée, à qui on demande d'afficher ce qu'elle contient. Pas top secure tout ça !  :D  
 
La même boulette dans le second exemple et là, le compilo de Perl t'affiche un joli warning sur l'utilisation + que douteuse de ton $Ttoto.
 
Dernier point : quand je fais ceci :

Code :
  1. my ($toto, $titi, $tata);


 
C'est comme si je faisais :

Code :
  1. my $toto;
  2. my $titi;
  3. my $tata;


Mais là, ça tient sur une seule ligne, c'est tout ;)


Message édité par Aricoh le 08-09-2003 à 09:52:23

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

Marsh Posté le 08-09-2003 à 09:53:37    

Tu peux également faire :

Code :
  1. my ($toto,
  2. $titi,
  3. $tata);



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

Marsh Posté le 08-09-2003 à 14:46:40    

Merci bien ! Ca peut servir, en effet.
Et "my", ça sert à quoi ? Je l'utilise un peu au hasard, et en général ça ressemble à:
my $titi, $tata, $toto ;
D'après tes exemples, on dirait qu'il faut des parenthèses, et c'est encore un truc dont mon tutorial "pour super débutant" ne parle pas.


---------------
Prison d'été, prison d'hiver, prison d'automne et de printemps, bagne pour petits et grands - Prévert, Le Roi et l'Oiseau
Reply

Marsh Posté le 08-09-2003 à 14:52:10    

Marnie a écrit :

Merci bien ! Ca peut servir, en effet.
Et "my", ça sert à quoi ? Je l'utilise un peu au hasard, et en général ça ressemble à:
my $titi, $tata, $toto ;
D'après tes exemples, on dirait qu'il faut des parenthèses, et c'est encore un truc dont mon tutorial "pour super débutant" ne parle pas.


Le 'my' sert à réserver un emplacement mémoire pour ta variable. Il n'y a pas que 'my', il existe aussi 'our' (je sais plus s'il est toujours utilisé avec Perl 5.8.0) et 'local' mais je n'utilise jamais ces deux derniers.
 
Dans ton exemple (my $titi, $tata, $toto), si tu utilises le 'my' sans employer le 'use strict', à mon avis seul le $titi est réservé, $tata et $toto ne le sont pas.
 
Laisse ton code tel quel en rajoutant le 'use strict' pour voir, à mon avis le compilo devrait beugler :D


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

Marsh Posté le 08-09-2003 à 15:13:14    

Beugler, c'est le mot. :D  
J'ai rajouté des parenthèses où il faut, le compilo est content.
Merci


---------------
Prison d'été, prison d'hiver, prison d'automne et de printemps, bagne pour petits et grands - Prévert, Le Roi et l'Oiseau
Reply

Marsh Posté le 08-09-2003 à 23:44:19    

le my sert à declarer une variable privée dans le bloque ou tu te situ
Donc si tu la declare en haut de ton code elle sera globale à tout ton code, amsi si tu la declare dans une subroutine elle n'existera que dans cette sub (et si un variable du meme nom avait été declarée en globale elle ne sera pas affectée). De meme si tu fait un my à l'interieur d'un if elle n'existera que dans ce if.
 

Aricoh a écrit :


Il n'y a pas que 'my', il existe aussi 'our' (je sais plus s'il est toujours utilisé avec Perl 5.8.0) et 'local' mais je n'utilise jamais ces deux derniers.


Le our sert à declarer des variables globales à un package, mais accessible depuis les autres package (avec le namespace complet, par exemple $LWP::Simple::VERSION). Cette instruction est toujours valide dans perl 5.8, et meme plus que jamais. Elle doit remplacer le use vars.
 
Le local c'est un peu different, c'est les variabels lexically scoped. C'est à eviter car ca peu donner des resultats etranges aux quels on ne s'attend pas, mais c'est toujuours utile pour declarer une subroutine ou jouer avec les *
 
 
 
En gros en haut de ton code il faut decalrer tous els variable globales avec un my, et dans les sub il faut declarer toutes les variables privée de la meme maniere.
Il faut au maximum eviter que els sub utilient des variables globales, mais plutot leur passer des valeur en argument
 
par exemple:
 

Code :
  1. my $taxe = 5;
  2. print taxe_calc(10,19.6);
  3. # ca donne 1.96
  4. # et on a toujours $taxe = 5;
  5. sub taxe_calc {
  6.     my ($somme, $taux) = @_;
  7.     # les argument sont passé dans @_, et on les recupere dans ces deux variables
  8.     my $taxe = $somme*$taux/100;
  9.     return $taxe;
  10. }


 
 
en dehors de cette fonction les variables $somme, $taux, et $taxe n'ont aucune sugnuification. Ca permet d'eviter els problemes si tu recupere une sub d'un autre programme par exemple. En rendant ses variables privées tu la rend totalement independante: elle se contente de recuperer des paramaetre et de rendre un resultat: c'est une boite noire


Message édité par pospos le 08-09-2003 à 23:46:56
Reply

Sujets relatifs:

Leave a Replay

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