Recherche de cooccurrences dans un texte catégorisé ou non
Utilisation d'expressions régulières. Repérer les agencements de catégories : constructions de règles de grammaires.
Perl :
apprentissage 4
Variables
globales, privées
Variables
globales
Les
déclarations de sous-programmes et de formats sont globales. Ces
déclarations globales peuvent être placées partout
oùl'on peut placer une instruction. Les déclarations sont mises
typiquement au début ou a la fin du programme, ou dans un autre fichier.
Une
variable utilisée en un point du programme est accessible depuis
n'importe où dans ce programme.
Déclarations
avec portée
Comme
les déclarations globales, les déclarations à
portée lexicale ont un effet au moment de la compilation. Les
déclaration à portée lexicale ont un effet depuis le point
de leur déclaration jusqu'à la fin du bloc le plus interne les
encadrant, d'où l'expression "à portée lexicale".
Pour
les variables privées à portée lexicale
(créées par my), il faut donc s'assurer que la définition
d'un sous-programme ou d'un format se trouve dans la même portée
de bloc que le my si l'on désire accéder à ces variables.
En
Perl 4, linstruction my nest pas définie. On utilise
linstruction local pour définir une variable qui nest pas
présente dans le programme principal.
En
Perl 5, la forme la plus fréquente de déclaration à
portée lexicale est la déclaration de variables my. Celle-ci
définit une variable qui nest pas présente dans le
programme principal. Linstruction local définit une variable qui
nest pas présente dans le programme principal, mais à
lintérieur du sous-programme et de tous les sous-programmes
appelés par celui-ci . Une variable créée par local
est à portée dynamique, alors que les variables my sont à
portée lexicale. La différence est que les variables dynamiques
sont également visibles depuis les fonctions appelées à
l'intérieur du bloc où ces variables ont été
déclarées. Les variables lexicales, non. Elles sont totalement
cachées du monde extérieur, y compris de tout sous-programme
(même si le sous-programme s'est appelé lui-même; chaque
instance du sous-programme reçoit sa propre copie des variables). Dans
les deux cas, la variable (ou valeur locale) disparaît quant le programme
sort de la portée lexicale dans laquelle le my ou le local se trouve. En
général, il convient de préférer my à local
parce qu'il est plus rapide et plus sûr. Mais il faut utiliser local si
l'on veut changer temporairement la valeur d'une variable globale existante.
- my
permet de créer des variables privées,
- local
permet de créer des valeurs semi-privées de variables globales.
Un
my ou un local déclare que les variables listées (dans le cas de
my) ou les valeurs des variables globales listées (dans le cas de local)
sont confinées au bloc, au sous-programme, à l'eval ou au fichier
qui les encadre. Si plus d'une variable est listée, la liste doit
être placée entre parenthèses. Tous les
éléments listés doivent être des lvalues
légales
(pour
my, les contraintes sont encore plus strictes: les éléments
doivent être de simples variables scalaires, tableaux ou hachages, et
rien d'autre).
Voici
quelques exemples de déclarations de variables à portée
lexicales:
my
$nom = "serge";
my
@trucs = ("voiture", "maison", "marteau");
my
($vehicule, $maison, $outil) = @trucs;
Ces
déclarations effectuent également une assignation
d'initialisation à l'exécution.
La
déclaration d'une variable lexicale d'un nom donné cache toute
variable lexicale du même nom précédemment
déclarée. Elle cache également toute variable globale non
qualifiée du même nom, mais celle-ci reste toujours accessible en
la qualifiant expressément avec le nom du package de la globale :
$Package::variable.
Une
séquence d'instructions peut contenir des déclarations de
variables a portée lexicale, mais à part déclarer les noms
de variables, les déclarations agissent comme des instructions
ordinaires et chacune d'entre elles est élaborée à
l'intérieur de la séquence d'instructions comme s'il s'agissait
d'une instruction ordinaire.