A.4. Le langage PERL

A.4.1. Qu’est ce que le PERL ?

Le langage PERL (Practical Extraction and Reporting Langage) est un langage de script qui est très utilisé pour les CGI sur Internet. Le PERL est un langage interprété, c’est-à-dire qu’il n’est pas compilé mais qu’il est linké et exécuté quand nécessaire.

Le PERL est fort utilisé pour les CGI car, il s’agit d’un langage de script multi plates-formes. En effet il existe des interpréteurs PERL pour à peu près toutes les plates-formes, des stations Unix aux stations Win32 en passant par le Macintosh.

PERL est un langage qui a été conçu pour être facile à utiliser, efficient et complet plutôt que beau, élégant et compact.

Bien que peu connu en dehors du monde des programmeurs Internet, le langage PERL semble voué à un bel avenir : en effet Microsoft a annoncé que Windows NT 5 supporterait PERL comme langage de script. Il ne semble pas prêt à disparaître comme beaucoup l’ont cru en 1995 avec l’arrivée du Java. Il combine plusieurs des meilleures fonctions du C et du Shell Unix et dispose de fonctions de recherches sophistiquées pour traiter des grosses quantités de données rapidement .

Bien que conçu pour traiter du texte, il peut aussi traiter des données binaires.

Avantages et inconvénients

L'inconvénient est qu'il est difficile de vendre un programme écrit en PERL car on vend aussi ses sources et que comme il s'agit d'un langage interpreté, il n'est pas aussi puissant que le C ou le C++.

 

 

A.4.2. Les variables en PERL

a. Les variables scalaires

C’est le type de variable le plus simple. En PERL, il ne faut pas déclarer quel type de contenu on va mettre dans la variable. On peut changer le contenu en cours d’exécution sans aucun problème.

Les variables scalaires sont reconnaissables au $ qui précède leur nom de variable.

Exemple :

$candidat = 9 ;

mais on pourrait mettre

$candidat = " Arthur " ; juste après

Les noms de variables peuvent être composés de chiffres, de lettres et du caractère souligné (_), mais elles ne peuvent pas commencer par un chiffre.

De plus la variable $_ est une variable spéciale, utilisée par de nombreuses fonctions en PERL.

Venant du monde Unix, le PERL est sensible à la casse : $a et $A sont donc deux variables distinctes.

a.1. Opérations et assignations

$a = 1; assigne 1 à la variable $a

$a = 1 + 3 ; ajoute 1 à 3 et assigne la résultat à la variable $a

$a = 4 - 2 ; soustrait 2 à 4 et assigne la résultat à la variable $a

$a = 10**9 ; élève 10 à la 9ème puissance et assigne la résultat à la variable $a

++$a; incrémente $a de 1 et retourne la nouvelle valeur de $a

--$a; décrémente $a de 1 et retourne la nouvelle valeur de $a

$a++; retourne la valeur de $a puis incrémente $a de 1

$a--; retourne la valeur de $a puis décrémente $a de 1

$a = $b; affecte la valeur de $b à $a

$a += $b; ajoute $b à $a et affecte le résultat à $a

$a -= $b; soustrait $b à $a et affecte le résultat à $a

$a .= $b; concatène $b à $a pour des chaînes de caractères uniquement

$a = "Arthur"; assigne Arthur à la variable $a

 

b. Les tableaux

C’est un type de variables très courant en PERL, il est fort utilisé pour la gestion de fichiers par exemple. On distingue 2 types de tableaux : les tableaux de valeurs et les tableaux associatifs.

b.1. Les tableaux de valeurs

Il s’agit d’une liste de valeurs, des nombres et/ou des chaînes de caractères. Les tableaux de valeurs sont déclarés de la même façon que les variables scalaires si ce n’est qu’ils sont précédés d’un @ à la place du $. Un exemple :

@voitures = ("Peugeot","Citroën","VW");

Cela remplit le tableau @voitures avec les 3 éléments cités.

Pour accéder au 2ème élément de ce tableau, on utilise $voitures[1] et pas @voitures[1]. C’est étrange, mais c’est comme ça.

La numérotation des éléments du tableau commence à 0 comme en C.

Donc $voitures[0] renvoie Peugeot, $voitures[1] renvoie Citroën et $voitures[2] renvoie VW.

b.2. Les tableaux associatifs

Il s’agit d’une variation des tableaux de valeurs. Ces tableaux permettent d’accéder autrement que par l’index habituel (0,1,2,…) aux valeurs contenues. On peut y accéder par une chaîne de caractères qui constitue l’index.

Pour définir un tableau associatif, on utilise presque la même notation que pour définir un tableau de valeurs, si ce n’est que le tableau est préfixé d’un % au lieu du @.

Par exemple, pour faire un tableau reprenant l'âge de personnes, on peut utiliser :

%ages =("Pascal",39,"Pierre",25,"Martine",20,"Jean",12);

pour récupérer l'âge de Pierre, on fera donc $ages("Pierre"); et on obtiendra 25.

Il faut remarquer que pour accéder à une valeur particulière, le % est remplacé par le $ comme on le faisait pour le tableau de valeurs.

Remarque : un tableau associatif peut être converti en tableau de valeurs par simple assignation, ce qui permet d’utiliser $ages[1]; pour avoir l'âge de Pierre

b.3. Opérations et assignations

permet d’ajouter à la fin d’un tableau l’élément ou la liste d’éléments spécifiés.

Exemple : Push(@voitures,"Audi");

On peut aussi l’utiliser pour mettre un tableau à la fin d’un autre tableau

Exemple : Push(@voitures,@autres_marques); aura pour effet de mettre le contenu du tableau @autres_marques à la fin du tableau @voitures.

Push renvoie également la longueur de la nouvelle liste.

permet de retirer le dernier élément d’une liste et de le renvoyer.

Si je fais $marque = pop(@voitures); j’ai dans $marque "Audi"

 

A.4.3. Les boucles

Les boucles en PERL ressemblent fort au C et au Pascal

For

C’est la réplique du for en C.

Syntaxe :

For (initialisation; test; incrémentation)

{ actions …

}

While

C’est à nouveau la même instruction qu’en C mais avec, en plus la possibilité d’utiliser le Until pour faire une négation. Until exécute le bloc jusqu'à ce que l’instruction soit vraie, contrairement au While qui s’exécute tant que l’instruction est vraie.

Exemple :

$i = 0

Do while ($i < 10)

{ print $i++;

}

va afficher les nombres de 0 à 9 à l’écran. On remarque au passage que l’incrémentation peut se faire comme en C.

Il est également possible d’effectuer le test à la fin de la boucle en utilisant le DO.

Exemple :

$I = 1

Do

{ print $I++;

}while ($I < 10);

va afficher les nombres de 1 à 9 à l’écran.

Foreach

Cette instruction permet de parcourir tous les éléments d’un tableau ou d’une structure quelconque. Elle se présente comme suit :

Foreach $eltdutableau (@nomdutableau)

{ instructions …

}

Exemple :

Foreach $ligne (@ensdelignes)

{ print $ligne;

}

Cet exemple va afficher tous les éléments du tableau @ensdelignes car chaque élément du tableau est copié dans $ligne afin de pouvoir être traité. Si le tableau est vide, on ne passera pas dans la boucle.

A.4.4. Les conditions

Le PERL permet de faire les branchements if-then-else bien évidemment.

Syntaxe :

If simpe :

If (condition)

{ actions à faire si la condition est remplie

}

else

{ actions à faire si la condition n’est pas remplie

}

 

If composé :

If (condition 1)

{ action à effectuer si la condition 1 est remplie

}

elsif (condition 2 )

{ action à effectuer si la condition 2 est remplie

}

else

{ action à effectuer si aucune des 2 conditions n’est remplie

}

 

A.4.5. Les fichiers

Comme le langage PERL a été développé pour pourvoir traiter de manière simple les fichiers, il est normal qu'il possède quantité de fonctions relatives au traitement de fichiers.

Seules les fonctions de base seront abordées ici.

En PERL, un fichier peut être un fichier physique situé sur un disque, mais aussi le clavier (STDIN), l'écran (STDOUT) et la sortie erreurs (STDERR).

L'entrée STDIN est souvent employée quand le script PERL doit traiter des informations en provenance d'un formulaire, puisque les données y sont stockées.

Ouverture et fermeture d'un fichier

L'ouverture d'un fichier se fait via la commande :

open (nom_symbolique, "nom_fichier").

nom_fichier contient le chemin d'acccès au fichier (par exemple c:\windows\modem.log). On ajoute aussi généralement avant le nom du fichier, la manière dont on va accéder au fichier. Pour les accès possibles, reportez vous au tableau ci dessous.

Commande

Description

open(nom_symbolique," nom_fichier")

Ouvre le fichier en lecture

open (nom_symbolique, "<nom_fichier")

L'ouvre aussi en lecture

open (nom_symbolique, ">nom_fichier")

Ouvre le fichier en écriture. S'il n'existe pas il est créé.

open (nom_symbolique,"

>>nom_fichier")

Ouvre le fichier en ajout, tout ce qui est écrit dans le fichier sera placé à la fin de celui-ci.

open(nom_symbolique, "+>nom_fichier")

Ouvre le fichier en lecture et en écriture

open(nom_symbolique, | PROGRAM)

Envoie les données imprimées dans le fichier nom_symbolique vers le programme PROGRAM

open(nom_symbolique,

PROGRAM |)

Utilise les données envoyées par PROGRAM comme source de données.

 

La fermeture d'un fichier se fait via la commande close(nom_symbolique);

Lire et écrire

Une méthode souvent utilisée en PERL consiste à lire entièrement le fichier et à placer tout son contenu dans une table. Cette méthode est fort pratique quand on travaille avec des fichiers dont chaque ligne correspond à un enregistrement.

On fait cela grâce à l'instruction :

@LINES=<nom_symbolique>;

Cette ligne place tout le contenu du fichier nom_symbolique dans le tableau @LINES.

On peut également lire une partie du fichier via l'instruction :

read(nom_symbolique, BUFFER, LONGUEUR,POSITION_DEBUT);

Cette instruction va lire le fichier nom_symbolique sur une longueur de LONGUEUR à partir de POSITION_DEBUT et va placer le résultat de cette lecture dans BUFFER.

L'écriture dans un fichier peut se faire de manière relativement simple en utilisant l'instruction : print nom_symbolique TEXTE;

Cela imprime dans le fichier nom_symbolique les données contenues dans TEXTE. Quand on ne spécifie pas de nom de fichier, cela signifie que l'on affiche TEXTE à l'écran.

TEXTE peut contenir des constantes mais aussi des appels de variables comme dans l'exemple suivant :

$nom = "Frédéric";

print "\nBonjour, mon nom est : $nom.";

Ce morceau de code affiche à l'écran :

Bonjour mon nom est : Frédéric.

Une autre instruction de sortie est l'instruction printf. Tout comme en C, elle permet de spécifier le format de sortie des données. Sa syntaxe générale est :

printf nom_symbolique(FORMAT, VARIABLES);

Cela permet d'aligner des nombres sur le signe décimal comme le montre l'exemple suivant :

$CoutJanvier = 123.34;

$CoutFévrier = 23345.45;

printf("Janvier = \$%8.2f\n", $CoutJanvier);

printf("Février = \$%8.2f\n", $CoutFévrier);

Ce morceau de code provoquera l'affichage suivant :

Janvier = $ 123.34

Février = $23345.45

 

Le PERL possède également toutes sortes de fonctions permettant de se positionner dans un fichier à un endroit donné, de supprimer des fichiers, de bloquer l'accès à des fichiers (sémaphores pour les accès concurrents sous Unix uniquement).

 

A.4.6. Les fonctions

Comme beaucoup de bons langages de programmation, le PERL autorise la création de fonctions propres.

Elles peuvent être placées n'importe où dans le programme, mais il est plutôt préférable de les placer toutes au début ou à la fin. Une fonction a la forme suivante :

sub ma_fonction

{ print "Fonction pas très intéressante \n";

print "Qui effectue toujours la même chose. \n";

}

On appelle une fonction en faisant précéder son nom du signe & (et commercial).

Pour l'appeler dans mon code, je ferai donc :

&ma_fonction;

ce qui provoquera l'affichage de :

Fonction pas très intéressante

Qui effectue toujours la même chose.

Si l'on veut utiliser des paramètres avec les fonctions, on fait suivre l'appel de la fonction des arguments séparés par des virgules, le tout entre parenthèses.

Les arguments sont récupérés dans la fonction via la variable tableau @_ . Il est donc possible d'accéder à un élément via son index.

Voici un exemple de passage de paramètres :

sub Affichage

{ print "Votre premier argument était $_[0]\n";

print "et $_[1] fut votre second argument\n";

}

&Affichage;("Roi", "soleil"); # appel de la fonction

Cela provoque l'affichage de :

Votre premier argument était Roi

Soleil fut votre second argument





© Rotule 1997-1998
Le
Webmaster attend vos commentaires