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 :
- my $taxe = 5;
- print taxe_calc(10,19.6);
- # ca donne 1.96
- # et on a toujours $taxe = 5;
- sub taxe_calc {
- my ($somme, $taux) = @_;
- # les argument sont passé dans @_, et on les recupere dans ces deux variables
- my $taxe = $somme*$taux/100;
- return $taxe;
- }
|
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