use strict !!! [Perl] - Perl - Programmation
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
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.
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 ?
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 :
|
Petit exemple avec :
Code :
|
Si, dans le premier exemple, j'avais fait ceci :
Code :
|
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 !
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 :
|
C'est comme si je faisais :
Code :
|
Mais là, ça tient sur une seule ligne, c'est tout
Marsh Posté le 08-09-2003 à 09:53:37
Tu peux également faire :
Code :
|
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.
Marsh Posté le 08-09-2003 à 14:52:10
Marnie a écrit : Merci bien ! Ca peut servir, en effet. |
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
Marsh Posté le 08-09-2003 à 15:13:14
Beugler, c'est le mot.
J'ai rajouté des parenthèses où il faut, le compilo est content.
Merci
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 : |
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 :
|
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
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