Formation Perl - Formateur Perl

Formation de qualité par un spécialiste Perl

Sylvain Lhullier

Version 1.5.0
avril 2024


Guide Perl - Débuter et progresser en Perl

Dernière version sur  https://formation-perl.fr/guide-perl.html
© 2002-2024 Sylvain Lhullier - Permission est accordée de copier et distribuer ce document sans modification et à condition de fournir un lien vers la page https://formation-perl.fr/guide-perl.html

> Envie d'une formation Perl ? Sylvain Lhullier propose des formations au langage Perl, contactez-le.

1. Premier pas

1.1. Exécuter un programme en Perl

Il existe principalement deux types de langages : les langages compilés et les langages interprétés. Pour les premiers (on retrouve par exemple dans cette catégorie le C et le C++), il existe deux phases distinctes : la compilation des sources par un compilateur (gcc par exemple) puis l'exécution du programme ainsi obtenu par le système. Pour les seconds (les shells par exemple), il n'y a pas de phase de compilation, un interpréteur va lire le code et directement agir en fonction de celui-ci.

Perl est un langage à la fois interprété et compilé. Il n'y a pas de phase intermédiaire de compilation, car l'interpréteur (qui se nomme perl en minuscules, alors que le langage prend une majuscule) compile le code sans que le programmeur ne s'en rende compte, puis l'exécute. L'interpréteur se charge donc à la fois de la compilation et de l'exécution.

Il existe trois façons distinctes de faire tourner un programme Perl :

  • mettre du code en ligne de commande. On peut écrire ceci dans un shell :

    perl -e 'print("Salut Larry\n");'
    

    Le programme perl est lancé avec du code Perl comme argument, directement sur la ligne de commande (option -e). En anglais, on appelle cela un one-liner (pas de traduction établie en français, peut-être monoligne, uniligne, soliligne...). Le code sera alors exécuté : la fonction print affiche son argument.

    Salut Larry
    

    Ce n'est pas la façon la plus courante d'écrire du Perl, mais c'est une manière facile et rapide de faire un petit calcul ou de faire appel à une fonction Perl.

  • la seconde manière de faire est de créer un fichier salut.pl contenant :

    print("Salut Larry\n");
    

    Puis de lancer la commande suivante depuis un shell :

    perl salut.pl
    

    Le programme perl est lancé avec le nom du fichier en argument. Il va alors lire le contenu de ce fichier et l'interpréter comme du code Perl ;

  • la troisième façon de faire est de créer un fichier salut2.pl contenant :

    #!/usr/bin/perl
    use strict;
    use warnings;
    print("Salut Larry\n");
    

    La première ligne est le shebang, bien connu des habitués des scripts en shell. Cette ligne (qui doit toujours être la première du fichier) indique au système d'exploitation le chemin de l'exécutable à lancer pour interpréter ce fichier. Le premier caractère doit être un dièse, ce qui a pour effet que cette ligne est considérée comme un commentaire Perl par l'interpréteur. Ensuite un point d'exclamation. Puis le chemin absolu vers l'exécutable perl (à adapter selon votre installation, voir ce que répond type perl ou which perl).

    Les deux lignes suivantes sont des pragma qui rendent le langage moins permissif.

    Le pragma use strict; permet de rendre le langage moins permissif, notamment en nous obligeant à déclarer nos variables. Je vous conseille de toujours utiliser ce pragma.

    Le pragma use warnings; est positionné dans le but que l'interpréteur affiche des messages d'avertissement (warnings) à différents propos : il indique les variables utilisées une seule fois ou utilisées avant d'être initialisées, il signale les redéfinitions de fonctions, etc. Je vous conseille donc de toujours utiliser ce pragma.

    Il faut maintenant rendre ce fichier exécutable et le lancer :

    chmod +x salut2.pl
    ./salut2.pl
    

    Grâce à la ligne de shebang, le système le reconnaît donc comme un programme nécessitant un interpréteur pour être exécuté. Cet interpréteur est lancé avec pour paramètres les options fournies dans le shebang ainsi que le nom du fichier.

    Cette dernière façon de faire est sans doute la plus courante dès que l'on écrit un programme qui sera utilisé plusieurs fois.

Avant de continuer, quelques commentaires sur la syntaxe Perl. Excepté dans les chaînes de caractères, la présence ou l'absence d'espaces, de sauts de ligne ou de tabulations ne change pas le comportement du programme, l'indentation est libre. Comme on vient de le voir, une instruction Perl est terminée par un point-virgule. Les fonctions peuvent prendre leurs arguments entre parenthèses (comme en C) ; il faut aussi savoir que l'on peut se passer de ces parenthèses. On aurait pu écrire :

print "Salut Larry\n";

Les deux syntaxes sont tout à fait valides. Dans les cas simples (appel d'une fonction avec un ou deux paramètres), on pourra omettre les parenthèses. Dans le cas de combinaisons plus complexes (plusieurs fonctions appelées en paramètre d'autres fonctions, listes en argument...), je vous conseille de les mettre pour lever toute ambiguïté possible.

Un commentaire commence par un dièse (#) et se termine en fin de ligne (comme en shell). On constitue un bloc d'instructions en les regroupant dans des accolades {} comme en C. Des exemples suivront.

1.2. Les types de données

Perl est un langage faiblement typé, ce qui signifie qu'une donnée n'aura pas spécialement de type : les nombres, les chaînes de caractères, les booléens, etc. seront tous des scalaires et ne seront différenciés que par leur valeur et par le contexte de leur utilisation.

Il existe principalement trois structures de données : les scalaires, les tableaux et les tables de hachage. Chaque structure de données est liée à un caractère spécial (lire la suite).

Un scalaire est une donnée atomique. Par exemple, ce pourrait être une chaîne de caractères (suite de caractères) ou un nombre (entier ou flottant). On verra plus tard que les références (c'est-à-dire les pointeurs de Perl) sont des scalaires, même s'ils sont un peu spéciaux. Les variables scalaires sont précédées d'un dollar ($) : $x est donc une variable scalaire.

Les tableaux permettent de stocker plusieurs scalaires en les indiçant. De la même façon qu'en C, on pourra demander le ième élément d'un tableau, i étant un entier. L'accès à un élément sera en temps constant, il ne dépendra pas de son indice dans le tableau. Les variables de type tableau sont précédées d'une arobase (@) : @t est donc une variable de type tableau. Lorsque l'on utilise la syntaxe @t, on désigne la totalité du tableau ; si nous voulons parler du ième élément, nous allons manipuler un scalaire, il faudra donc préfixer par un dollar : $t[4] est l'élément d'indice 4 dans le tableau @t, les crochets [] délimitant l'indice (nul besoin de mettre l'arobase, Perl sait grâce aux crochets qu'il s'agit d'un élément de tableau).

Une table de hachage en Perl est une structure de données permettant d'associer une chaîne de caractères à un scalaire ; on parle de clefs et de valeurs : une valeur est associée à une clef. Naturellement, dans une même table de hachage les clefs sont uniques ; les valeurs, par contre, peuvent être tout à fait quelconques. Les variables de type table de hachage sont précédées d'un caractère pourcent (%) : %h est donc une variable de type table de hachage. De la même façon que pour les tableaux, %h représente la totalité de la table de hachage ; accéder à un élément se fera avec un dollar : $h{uneclef} est l'élément de clef uneclef de la table de hachage %h, les accolades {} délimitant la clef. Fonctionnellement, on pourrait voir une table de hachage comme un tableau dont les indices peuvent être non numériques.

Nous reviendrons sur ces types de données tout au long du document.

1.3. La notion de contexte

Chaque opération en Perl est évaluée dans un contexte spécifique. La façon dont l'opération se comportera peut dépendre de ce contexte. Il peut jouer un rôle important sur le type des opérandes d'une expression et/ou sur le type de sa valeur. Il existe deux contextes principaux : le contexte scalaire et le contexte de liste.

Par exemple, une affectation d'une expression à une variable de type scalaire évaluera cette expression dans un contexte scalaire ; de la même façon, une affectation à une variable de type liste évaluera le membre droit en contexte de liste. Autre exemple que je détaillerai un peu plus loin, les opérateurs de test imposent un contexte précis à leurs opérandes.

Certains opérateurs et fonctions savent dans quel contexte ils sont appelés et renvoient un scalaire ou une liste selon ce contexte d'appel. La fonction grep en est un bon exemple (nous verrons cela lorsque nous parlerons des listes). On peut forcer le contexte d'une expression au contexte scalaire en utilisant l'opérateur scalar().

Il existe plusieurs contextes scalaires : le contexte de chaînes de caractères, le contexte numérique et le contexte tolérant. Par exemple une addition impose un contexte numérique à ses deux opérandes ; cela signifie que les opérandes sont transformés en nombres, quels que soient leur type et leur valeur (reste ensuite au programmeur à savoir ce que vaut une liste ou une chaîne quelconque en contexte scalaire...). Le contexte de chaînes est un contexte où, comme son nom l'indique, les scalaires seront considérés comme des chaînes de caractères. Le contexte tolérant n'est ni de chaînes ni numérique, il est simplement scalaire.

Il existe aussi un contexte vide (void context in English) qui correspond au fait que la valeur d'une expression est ignorée. C'est par exemple le contexte utilisé lorsque l'on appelle une fonction sans récupérer sa valeur de retour, comme l'appel à la fonction print dans la section précédente. Ce contexte n'apporte pas grand chose au programmeur, mais permet à l'interpréteur Perl appelé avec use warnings; de prévenir en cas d'usage d'une expression sans effet de bord en contexte vide (c'est-à-dire une expression qui ne fait rien et dont on ne se sert pas). Par exemple, la ligne d'instructions suivante :

"Bonjour";

provoque le message suivant :

Useless use of a constant in void context at prog.pl line 5.

Vous aurez l'occasion de manipuler les contextes tout au long de cette introduction au langage. Même si cela n'est pas forcément explicite à chaque instant, le contexte est souvent important.


Contact © 1999-2024 formation-perl.fr
Formation Perl - Formation Perl intra entreprise - Formation Perl inter entreprise - Formateur Perl - Formateur Perl délégation
Formation Perl Formateur Perl Appartement à louer à Noisy-le-Grand Bric-à-Brac