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

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] use strict !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] use strict !!!

n°509128
pospos
Posté le 06-09-2003 à 01:02:38  profilanswer
 

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
mood
Publicité
Posté le 06-09-2003 à 01:02:38  profilanswer
 

n°509140
burgergold
5$? va chez l'diable!
Posté le 06-09-2003 à 04:06:33  profilanswer
 

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
n°509955
Aricoh
gentil mais fo po pousser
Posté le 08-09-2003 à 09:18:23  profilanswer
 

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
n°509958
Marnie
Posté le 08-09-2003 à 09:29:39  profilanswer
 

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
n°509965
Aricoh
gentil mais fo po pousser
Posté le 08-09-2003 à 09:51:04  profilanswer
 

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
n°509967
Aricoh
gentil mais fo po pousser
Posté le 08-09-2003 à 09:53:37  profilanswer
 

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
n°510167
Marnie
Posté le 08-09-2003 à 14:46:40  profilanswer
 

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
n°510168
Aricoh
gentil mais fo po pousser
Posté le 08-09-2003 à 14:52:10  profilanswer
 

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
n°510172
Marnie
Posté le 08-09-2003 à 15:13:14  profilanswer
 

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
n°510592
pospos
Posté le 08-09-2003 à 23:44:19  profilanswer
 

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

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

  [Perl] use strict !!!

 

Sujets relatifs
[ Perl] Truc bizarre avec @ARGV[Perl] Appeler un script (avec des param) à partir d'un autre script ?
[Perl] décomposer un nombre, comment ?[Perl]Valider le format d'une chaine de caractères
[Perl CGI] Problème d'affichage[perl] remplacer les \n par des <br> dans un fichier ...
[Perl] Probleme de formulaire en postCode perl non interprété sur apache.
Config apache2 / perl probleme 
Plus de sujets relatifs à : [Perl] use strict !!!


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