L'un des éléments fondamentaux dans la maitrise de l'automatisation, est la maitrise d'un langage de programmation. Ainsi, il était nécessaire pour le wiki d'utiliser un langage interprété qui soit simple d'utilisation, et tout à la fois puissant en ce qui concerne la manipulation de textes (média sur lequel repose le code wiki). Il semble que le langage Perl possède ces deux qualités, c'est pourquoi j'ai choisi, même si je n'ai jamais écrit une seule ligne de code en Perl, de fonder les principes d'automatisation de Wikisquare sur celui-ci. Même si d'autre langages tel que le Bash (que j'utilisais auparavant) auraient tout à fait pu faire l'affaire.
Soyez indulgents, il n'est pas facile (mais possible) de donner un cours sur quelque chose que l'on ne connait pas soi-même. Cependant rassurez-vous, je n'ai aucune intention d'écrire du vent, et je testerai et mettrai en application chacun des éléments que j'énoncerais. J'essayerais autant que possible de me baser sur le manuel de référence. Cet article ne se veut pas un cours complet de Perl, si c'est ce que vous cherchez , voir la section “Voir aussi”. Il présentera les bases indispensables à la conception de scripts en Perl et se concentrera uniquement sur les points essentiels dans la conception de mécanismes d'automatisation pour le wiki. Il restera le plus clair et simple possible et sera agrémenté d'exemples concrets.
Pour une compatibilité optimum, un script Perl adopte les caractéristiques suivantes :
.pl
#!/usr/bin/env perl
Bien qu'il soit possible d'utiliser Perl sous de nombreux environnements, je vous conseille fortement d'utiliser un environnement de type Unix (GNU/Linux; BSD; Mac OS X).
Pour exécuter le script Perl, saisissez simplement la commande suivante :
perl nomprog.pl
Pour rendre un fichier exécutable, saisissez la commande :
chmod u+x nomprog.pl
Vous pourrez ainsi exécuter directement le script à condition que l'entête soit correctement indiqué comme précisé ci-dessus, en saisissant simplement :
./nomprog.pl
Le script est évalué de haut en bas et de gauche à droite depuis le début de celui-ci. Chaque instruction se termine par un point-virgule (;
) et les chaines composés des caractères : “espace”, “tabulation” et “retour à la ligne”, ne sont prise dans leur ensemble que comme un unique séparateur. Mis à part pour les chaines entre quotes où ils sont comptés tel quel.
Exemple :
print 'Hello world';
est strictement équivalent à
print 'Hello world' ;
mais pas à
print 'Hello world';
Le caractère #
lorsqu'il n'est pas entouré de quotes, ni précédé du signe $
, signifie que tous les caractères qui se situent après, sur la ligne courante sont en commentaire. Ils n'ont donc aucune incidence sur le script.
Les commentaires sont principalement destinés aux développeur (y compris vous) amenés à lire votre programme. Pour une meilleur compréhension de celui-ci. En règle générale, leur but n'est pas de détailler le fonctionnement de chaque commande mais plutôt d'éclaircir le fonctionnement général de votre script.
Exemple :
Ceci est interprété par Perl; #Ceci est un commentaire Ceci est interprété par Perl;
Les chaines peuvent être placés entre simple ou double quote. Dans une chaine entre double quotes les caractères spéciaux sont évalué. Dans une chaine entre simple quote, ils sont pris tel quel.
Exemple :
my $nom = 'Sébastien'; print "Salut $name !\n"; # Affiche "Salut Sébastien !", suivis d'un retour à la ligne print 'Salut $name !\n'; # Affiche "Salut $name !\n"
Il n'est pas nécessaire d'encadrer les valeurs numériques par des quotes. La séparation entre la partie entière et décimale est marquée par un point (.
).
Exemple :
print 300; # Affiche le nombre entier "300". print 6.55957; # Affiche le nombre flottant "6.55957".
Les variables permettent de stocker temporairement des données nécessaires au fonctionnement du script en mémoire. Celle-ci peut contenir des nombre entiers, flottants (à virgule), ou des chaines de caractères. La conversion entre ces différents types est gérée automatiquement par Perl.
En Perl on distingue trois principaux types de variables :
On distingue également les variables locales des variables globales. On parle également de porté de la variable. Une variable locale est accessible dans l'ensemble du script. Une variable locale n'est accessible que dans le bloc en cours. Pour rendre une variable locale, il faut la faire précéder de my
. L'utilisation inutile de variables globales est considérée comme une mauvaise pratique de programmation.
Un scalaire représente une variable qui n'a au même moment qu'une seule valeur. Pour faire référence à un scalaire, on fait précéder son nom du caractère $
.
Exemple :
my $pseudo = 'FFTiger'; my $age = 17; my $poids = '72'; my $taille = 1.82;
Les tableaux permettent de stocker une liste de valeurs. Le nom d'un tableau est précédé du caractère @
. Un tableau est constitué de plusieurs éléments qui sont spécifiés entre parenthèses. A chaque élément est associé un numéro d'index qui va de 0 à n éléments. Pour faire référence à un des éléments du tableau, on indique son numéro d'index entre crochets : $nomdutableau[10]
fera référence au onzième élément du tableau. La variable spéciale $#nomdutableau
fait référence au numéro d'index du dernier élément du tableau. Elle permet donc également de connaitre le nombre d'éléments du tableau qui vaut $#nomdutableau + 1
car l'index débute à 0.
Exemple :
my @amis = ('Hyne', 'Kikujitoh', 'Myst6re'); # L'ordre de classement définit le numéro d'index associé à chaqun des éléments de 0 à n. A vous d'immaginer selon quel critère je les ai classé :p my @finalfantasy = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, '10-2', 11, 12, 13); # "my" ne signifiant pas "mes" voir ci-dessus, il est bien entendu faux d'interpréter que je possède ff13 ^^ print $amis[1]; # Affiche "Kikujitoh" print $amis[$#amis]; #Affiche "Myst6re"
Dans le dernier exemple, le colorateur syntaxique du wiki laisse présager que tout ce qui se situe après le premier #
de la dernière ligne est en commentaire. C'est un bug ! Essayez de refaire cet exemple, print $amis[$#amis];
affiche bien “Myst6re” !
: Corriger ce bug.
Pour faire référence à plusieurs éléments d'un tableau on utilise les syntaxes suivantes :
@nomdutableau
: Fait référence au tableau dans sa totalité.@nomdutableau[a,b,etc]
: Fait référence aux éléments d'indice a et b du tableau.@nomdutableau[a..b]
: Fait référence à tous les éléments de a à b (inclus) du tableau.Exemple :
my @finalfantasy = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, '10-2', 11, 12, 13); my @ffsuite = $finalfantasy[9]; # Fait référence à Final Fantasy X my @ffpair = @finalfantasy[1,3,5,7,9,12]; # Fait référence à Final Fantasy II, IV, VI, VIII, X et XII my @ffps2 = @finalfantasy[9..12]; # Fait référence à Final Fantasy X, X-2, XI et XII
Le tableau @ARGV
fait référence aux arguments passés au script en ligne de commande. Et @_
aux arguments passés dans une “sous-routine”. : Ca veut rien dire.
Une table de hachage est une liste de couples de clé/valeur, comprenez à chacun des mots clés qui composent la table de hachage est associée une valeur. On peut ainsi récupéré une valeur à partir de sa clé. On peut utiliser deux syntaxe différentes :
my %nomduhash = ('clé1', 'valeur1', 'clé2', 'valeur2', etc)
my %nomduhash = ('clé1' ⇒ 'valeur1', 'clé2' ⇒ 'valeur2', etc)
Pour faire référence à une valeur, on utilise la syntaxe suivante : $nomduhash{'nomdelaclé'}
Exemple :
my %creditff9 = ('Producteur' => 'Hironobu Sakaguchi', 'Musique' => 'Nobuo Uematsu', 'Directeur artistique' => 'Hideo Minaba', 'Illustration' => 'Yoshitaka Amano'); print $creditff9{'Musique'}; # Affiche "Nobuo Uematsu"
Les références sont des scalaires constitués de tables de hachage, dont les clés sont elles même des tables de hachage, ce shéma pouvant se reproduire sur plusieurs niveaux. Chaque table de hachage est encadré par {
et }
. Les références permettent ainsi de créer des types de données plus élaborées. Pour faire référence à une valeur dans une référence, utilisez la syntaxe suivante : $nomdelareference→{'nom_cle_niveau_1'}→{'nom_cle_niveau_2'}→{'ect'}
Exemple :
my $bestiaire = { monstre1 => { nom => 'Grosmouatemouate', description => 'gros, bête et méchant.', HP => 150000, MP => 0, }, monstre2 => { nom => 'Moyenmouatemouate', description => 'moyen, bête et méchant.', HP => 75000, MP => 75000, }, monstre3 => { nom => 'Petitmouatemouate', description => 'petit, bête et méchant.', HP => 0, # La preuve qu'il n'est pas interdit de mettre des absurdités dans votre code, provoquant des erreurs difficiles à détecter car il n'y aura pas d'erreur à l'execution et pourtant votre script ne fonctionnera pas. MP => 150000, }, }; print "Un $bestiaire->{'monstre1'}->{'nom'} est $bestiaire->{'monstre1'}->{'description'}\n"; # Affiche "Un Grosmouatemouate est gros, bête et méchant."
Les structures conditionnelles permettent de créer des boucles, dans lesquelles un bloc de code s'éxecute tant qu'une condition est respectée.
Le if permet d'exécuter un bloc d'instructions si une condition est respectée. Si l'on souhaite également associer un bloc d'instruction lorsque la condition n'est pas respectée, on peut utiliser else ou elseif si l'on souhaite poser une autre condition.
Syntaxe : if (condition) { instruction1; instruction2; etc; } elseif (condition2) { instruction; } elseif (condition3) { instruction; } else { instruction; }
man perl
sous Unix.
Qui sommes-nous ?
Aidez WikiSquare en le faisant connaître !
Sauf mention contraire, tous les textes sont disponibles sous les termes de la GNU Free Documentation License.
Les images sont sous le copyright de leurs auteurs.
Page générée en 0.029425859451294 seconde.