Le Perl pour WikiSquare

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.

FIXME : FFTiger : Étant l'auteur original de cet article, j'ai parfois écrit à la première personne du singulier pour préciser le contexte dans lequel il a été écrit. Cependant, lors des évolutions futures de celui-ci (j'entends par là une fois que l'expérience aura permis à moi-même et à la communauté de corriger mes erreurs de débutant), il serait bien de supprimer ces passages pour en faire un article moins personnel et supprimer également cette note.

Utilisation

Pour une compatibilité optimum, un script Perl adopte les caractéristiques suivantes :

  • Il s'agit d'un fichier texte qui peut donc être édité avec tous les éditeurs compatibles avec ce média
  • Son extension est .pl
  • Le fichier débute par le commentaire suivant :
#!/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).

Unix

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

Windows

Mac OS

Syntaxe

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';

Commentaires

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;

Chaines de caractères

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"

Valeurs numériques

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".

Variables

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 :

  • Scalaires : Un seul élément.
  • Tableaux : Représente une liste d'éléments.
  • Tables de hachage : Représente des couples d'éléments.
  • Références : Association de ces trois types pour créer des types de donnés plus complexes.

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.

Il est fortement conseillé de n'utiliser que des caractères alphanumériques (chiffres et lettres) dans les noms de variables. Evitez les accents ou autres caractères spéciaux qui pourraient provoquer des erreurs lors de l'exécution du script.

Scalaires

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;

$_ fait référence à la variable par défaut utilisé dans nombre de fonctions. Elle est notamment utilisé dans certaines boucles. Voir les structures conditionnelles.

Tableaux

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” ! FIXME : Corriger ce bug.

Pour faire référence à plusieurs éléments d'un tableau on utilise les syntaxes suivantes :

  1. @nomdutableau : Fait référence au tableau dans sa totalité.
  2. @nomdutableau[a,b,etc] : Fait référence aux éléments d'indice a et b du tableau.
  3. @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

Cet exemple est la preuve qu'il ne faut surtout pas se fier au contenu des tableaux pour spécifier leur numéro d'index. Dans certains cas, ils peuvent induire en erreur.

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”. FIXME : Ca veut rien dire.

Tables de hachage

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 :

  1. my %nomduhash = ('clé1', 'valeur1', 'clé2', 'valeur2', etc)
  2. 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"

Le hash spécial “%ENV” fait référence aux variables d'environnement de votre système.

Références

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."

Structures conditionnelles

Les structures conditionnelles permettent de créer des boucles, dans lesquelles un bloc de code s'éxecute tant qu'une condition est respectée.

if

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; }

while

for

foreach

Voir aussi

  • Le manuel de référence, accessible avec la commande man perl sous Unix.
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Powered by DokuWiki GNU FDL

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.04443097114563 seconde.