On utilisera les programmes déjà écrits auxquels on ajoutera les modifications nécessaires pour l'objectif visé.
Perl :
apprentissage 3
Procédures
Un
sous-programme est une partie de code séparée conçue pour
exécuter une tâche particulière. Ils se placent
nimporte où dans le programme. Cependant, il est
préférable de les regrouper, soit au début, soit à
la fin.
Déclaration
sub procedure {
bloc ;
}
Appel
&procedure;
Linterpréteur
de Perl utilise le caractère & pour indiquer quun
sous-programme est spécifié dans linstruction. Avec Perl
5, il nest plus nécessaire dindiquer ce caractère
lors de lappel du sous-programme si celui-ci a déjà
été défini. Si on place les sous-programmes à
la fin du programme, il reste nécessaire dutiliser le
caractère & lors de lappel.
On
peut aussi établir une référence préalable à
un sous-programme défini en fin de programme et ainsi ne pas utiliser le
caractère & lors de lappel :
sub procedure;
...
procedure ;
...
sub procedure {
bloc ;
}
Avec
paramètre(s)
&proc('parametre');
Fonctions
Une
fonction est une procédure qui retourne une valeur.
sub pluriel {
my (@mots) = @_ ;
foreach $mot (@mots) {
$mot := s ;
}
return(@mots) ;
}
lappel
est fait de la manière suivante :
$mot_au_pluriel = &pluriel('mot');
La
variable $mot_au_pluriel contient la chaîne
mots .
Le
passage de paramètres se fait donc à l'aide du tableau
spécial @_ . L'instruction my réalise une
affectation dans des
variables
locales à la procédure
(cf. infra) avec les éléments du tableau. Ce type de passage de
paramètre est très efficace car le nombre de paramètres
n'est pas forcément fixe.
Fonctions
prédéfinies
Quelques
fonctions offertes par Perl pour manipuler les données.
Système
print :
permet
d'afficher un message, ou le contenu de variables.
Quelques
caractères spéciaux affichables avec print :
- \n :
retour-chariot
- \t :
tabulation
- \b :
bip
exit :
permet
d'arrêter le programme en cours
if ($erreur) {exit;}
die :
permet
d'arrêter le programme en cours en affichant un message d'erreur.
if ($mot eq 'arret') {die 'Je marrete !'}
system :
permet
de lancer une commande système
system 'mkdir repertoire';
sleep
n :
le
programme dort pendant n secondes
Mathématique
Les
fonctions mathématiques habituelles existent aussi en Perl : sin, cos,
tan, int(partie entière d'un nombre), sqrt, rand (nombre
aléatoire entre 0 et n), exp (exponentielle de n), log, abs(valeur
absolue).
Chaînes
de caractères
chop(ch) :
enlève
le dernier caractère de la chaîne
chomp(ch) :
enlève uniquement un retour-chariot
length(ch) :
retourne
la longueur de la chaîne (nombre de caractères)
uc(ch) :
retourne
la chaîne en majuscules (Perl 5)
lc(ch) :
retourne la chaîne en minuscules (Perl 5)
split('motif',
ch) :
sépare
la chaîne en plusieurs éléments (le séparateur
étant motif). Le résultat est un tableau.
substr(ch,
indicedébut, longueur) :
retourne la chaîne de caractère contenue dans ch, du
caractère indicedébut et de longueur longueur.
index(ch,
recherche) :
retourne la position de recherche dans la chaîne ch
Tableaux,
listes
grep(/expression/,
tableau) :
recherche
d'une expression dans un tableau ; grep retourne un tableau des
éléments trouvés.
join(ch,
tableau) :
regroupe tous les éléments d'un tableau dans une chaîne de
caractères (en spécifiant le séparateur)
pop
(tableau) :
retourne le dernier élément du tableau (et l'enlève)
push
(tableau, element) :
ajoute un élément en fin de tableau (contraire de pop)
shift(tableau) :
retourne le premier élément du tableau (et l'enlève)
unshift
(tableau, element) :
ajoute un élément en début de tableau
sort
(tableau) :
tri le tableau par ordre croissant
reverse
(tableau) :
Inverse le tableau
splice
(tableau, début, nb) :
enlève nb éléments du tableau à partir de l'indice
début
Tableaux
indicés
each(tableau_indicé) :
les
couples clé/valeurs dun tableau indicé
values(tableau_indicé) :
toutes
les valeurs d'un tableau indicé (sous la forme d'un tableau)
keys(tableau_indicé) :
toutes
les "clés" d'un tableau indicé
exists(élément) :
indique
si un élément a été défini
delete(élément) :
supprimer
un élément
Gestion
de fichiers
Ouverture
L'ouverture consiste (le plus souvent) à associer un descripteur de
fichier (filehandle) à un fichier physique.
En
lecture
open (FileInput, 'fichier');
Ouverture
d'un fichier, référencé ensuite par FileInput.
Un
fichier spécial: STDIN, le clavier (entrée standard).
En
écriture
open (FileOutput, '> fichier');
Ecriture
du fichier, si ce fichier existait auparavant : l'ancien contenu est
écrasé.
open (FileOutput,'>>fichier');
Ecriture
à la fin du fichier, Le fichier est créé si besoin.
Deux
fichiers spéciaux: STDOUT, STDERR (respectivement: sortie standard, et
sortie erreur), par défaut l'écran.
Gestion
des erreurs (||)
Lorsque
l'on ouvre un fichier il se peut qu'il y ait une erreur. Il faut prendre
l'habitude, quand on ouvre un fichier, de détecter l'erreur
éventuelle. On peut le faire sous la forme suivante :
(dérivée du C)
if (! open (FileInput, ...)) {
die "Problème à l'ouverture du fichier";
}
Ou
sous la forme plus simple et plus usitée en Perl :
open (FileInput, ...) || die "Pb d'ouverture";
On
peut, et c'est même conseillé, récupérer le texte de
l'erreur contenu dans la variable $! :
open (FileInput, ...) || die "Pb d'ouverture : $!";
Fermeture
Commande
close :
close FileInput;
close FileOutput;
Lecture
$ligne = <FileInput>;
- lecture
d'une ligne à l'écran
La
fin de ligne (retour-chariot) est lue également. Pour enlever cette fin
de ligne il suffit d'utiliser la commande chop, ou son équivalent :
chomp (enlève le dernier caractère uniquement si c'est un
retour-chariot).
On
peut lire toutes les lignes d'un fichier dans un tableau (en une seule
instruction) :
@lignes = <FileInput>;
Ecriture
print FileOutput message ;
Fichier
spécial : <>
Perl
offre une fonctionnalité bien pratique : l'utilisation d'un fichier
spécial en lecture qui contiendra ce qui est lu en entrée
standard. Lorsque, dans une boucle while , on ne spécifie
pas dans quelle variable on lit le fichier : la ligne lue se trouvera dans la
variale spéciale $_ .
Variables
spéciales
Ce
sont les variables sous la forme $c (avec c un caractère non
alphabétique) :
- $_
La dernière ligne lue (au sein d'une boucle while ).
- $!
La dernière erreur, utilisée dans les détections d'erreurs.
- $$
Le numéro système du programme en cours: parfois utile car il
change à chaque appel.
- $1,
$2, ... Le contenu de la parenthèse numéro dans la
dernière expression régulière.
- $0
Le nom du programme (à utiliser, cela vous évitera de modifier le
programme s'il change de nom).
Tableaux
spéciaux
- @_
Contient les paramètres passés à une procédure.
- @ARGV
Contient les paramètres passés au programme.
- %ENV
Tableau indicé contenant toutes les variables d'environnement.
- @INC
Tous les répertoires Perl contenant les librairies .