Ingénieurs 2000
Filière Informatique et Réseaux

Projet Système 2001-2002
Christian Favier


Initiation au Perl


Historique - Les atouts - Les variables - Manipulation de fichiers - Expression régulières




Historique

Perl a été créé en 1987 par un linguiste du nom de Larry Wall.
Perl signifie Practical Extraction and Report Language car c'est un langage créé pour gérer facilement des fichiers et chaînes de caractères.
Petit à petit, Perl a été développé grâce à l'extension du web notamment avec l'uilisation des news: comp.lang.perl.misc.
Certains parlent même du Perl comme d'un langage Pathologically Eclectic Rubbish Lister. En gros, une liste de tout et n'importe quoi. Car ce langage reprend beaucoup de fonctionnalités utiles. C'est un peu le tout en un.
Pour en savoir plus, tapez la commande: perlhist ou allez sur cette page: .
Et si vous souhaitez en savoir plus sur le Perl, en général, visitez le site officiel: .

Les principaux atouts

- Gratuit
- Portable
- Facilité d’utilisation
- Compilation "automatique" (langage de script)
- Fonctionnalités sur la recherche de motif et les chaînes de caractères performantes


Les variables

Il y a plusieurs types de variables sous Perl.
Variables scalaires:
Les variables scalaires sont les variables classiques qui contiennent soit un entier relatif, soit une chaîne de caractères.
Elles commencent par le caractère $. Exemples d'utilisation:
	  $count = 0;
	  $message = "Coucou le monde";
Listes et Tableaux:
Les listes et tableaux sont des variables contenant plusieurs variables scalaires.
Le nom des tableaux commence par un @.
Exemples d'utilisation:
	  @tableau = (0, 3, 5);
	  $tableau[0] = 1; # la valeur 0 est remplacée par 1
Tableaux associatifs:
Les tableaux associatifs sont des tables de hashage. C'est à dire, que c'est un tableau indexé par des clés. A chaque clé correspond une variable en particulier.
Les tableaux associatifs commencent par %. Exemples d'utilisation:
	  %user = ("nom", "Dupont", "prenom", "Paul");
	  # (nom et prenom) = keys, (Dupont et paul) = values
	  $user {"prenom"} = "Marc"; # Paul devient Marc
Les variables système:
La syntaxe du Perl est souvent ambigüe à cause des variables systèmes de Perl dont voici la liste:

Télécharger la liste des variables système (save as):
VariableDescription
$_Valeur courante
@_Liste courante
%ENVVariables d'environnement
@ARGVArguments passés au programme
$!Message d'erreur système (errno)
$$Numéro du process (UNIX)
$%Numéro de la page du device de sortie
$&La chaîne de caractères correspondant à la dernière recherche
$'Valeur suivant le mot recherché dans la chaîne trouvée
$(GID réel du process (UNIX)
$)GID effectif du process (UNIX)
$*Est à 1 si plusieurs lignes contiennent la chaîne recherchée
$-Nombre de lignes imprimées sur la page de sortie
$+La dernière correspondance trouvée par une recherche
$.Ligne courante
$,Séparateur de champs en sortie de la commande print utilisée avec des , en séparateur
$;Séparateur pour les tableaux multi dimension
$/Séparateur de champs (nouvelle ligne par défaut)
$|De valeur non nulle force un flush après chaque écriture sur le canal de sortie (0 par défaut).
$\Marque de fin de ligne en sortie de la commande print.
$"Séparateur de champs tableau en sortie de la commande print.
$<UID réel du process (UNIX)
$=Longueur de la page de sortie
$:Jeu de caractère après lequel une chaîne peut être coupée pour remplir le champ suivant.
$>UID effectif du process (UNIX)
$?Statut retourné par la dernière commande
$@Dernier message d'erreur provoqué par Perl
$#Format de sortie pour les nombres imprimés (ne plus utiliser en Perl5)
$[Index du premier élément d'un tableau
$]Version de Perl
$^Nom du format courant d'en-tête de page
$^ALa valeur courante de l'accumulateur write() pour les lignes format()
$^DEtat du flag de debug
$^FNombre de descripteurs de fichier système
$^IValeur courante pour l'extension inplace-edit (voir option -i)
$^LEnvoie un Form Feed sur le canal de sortie
$^PFlag interne que le debugueur remet à zéro.
$^TTemps d'exécution de Perl
$^WValeur de la chaîne de Warning
$^XNom d'exécution du programme Perl
$`Valeur précédant la chaîne trouvée lors de la précédente recherche
$~Nom du canal de sortie
$0Nom du fichier contenant le programme Perl en cours d'exécution
$ARGVNom du fichier courant quand la lecture utilise <>
@INCContient les programmes Perl utilisés en librairie
%INCContient les entrées de tous les fichiers inclus par la directive require
%SIGContient la table de tous les signaux


Manipulation de fichiers

Ouverture – Fermeture d'un fichier:
On peut simplement ouvrir ou fermer un fichier en suivant l'exemple suivant:
	  open (FILE, "config.txt");
	  close (FILE);
Notion de File Handle:
On peut facilement manipuler facilement les fichiers à l'aide des File Handles comme suit:
 
	  $ligne = <FILE>; # récupérer la ligne courante 
	  # du fichier (à noter qu'on avance dans le fichier)
	  print FILE "Ajouter un message"; # on écrit dans le fichier
Entrée et sortie standard:
On peut aussi manipuler les entrée/sortie standard comme un Handle:
	  $line = <STDIN>; # Entree standard (équivalent à <>)
	  print STDOUT "Message dans la sortie standard";


Expressions régulières

Les nouveaux opérateurs:
La commande split:
La commande split découpe une chaîne de caratère en mettant le résultat dans un tableau. La syntaxe est la suivante: split (/motif/, $chaine).
Exemple:
	  @list = split (/o/, "coucou");
	  # $list[0] donne "c", $list[1] donne "uc" et $list[2] donne "u"
L'opérateur de recherche $chaine =~ /motif/:
L'opérateur =~ retourne "vrai" s'il trouve le motif dans la chaîne.
Exemple:
	  if ($line =~ /coucou/) { print $line; }
	  # Ici, on affiche que si la chaîne $line contient "coucou"
	  Note: /motif/ équivaut à $_ =~ /motif/
L'opérateur de substitution s/modèle/remplacement/:
L'opérateur s/ remplace le modèle de la chaîne par la chaîne de remplacement.
Exemple:
	  $msg = "Hihi, haha, hoho";
	  $msg =~ s/[iao]/ey/g; # $msg est devenu "Heyhey, heyhey, heyhey"
La syntaxe pour les motifs:
Un ou plus +: /ab+c/ match pour abc, abbc, abbbc…
Zéro ou plus *: /ab*c/ match pour ac, abc, abbc, abbbc…
Zéro ou un ?: /ab?c/ match pour ac ou abc
Groupes de caractères []: /[abc]/ match pour a, b ou c
Début de chaîne ^: /^abc/ match les mots commençant par abc
Fin de chaîne $: /abc$/ match les mots finissant par abc
N'importe quel caractère .: /ab.c/ match pour abdc, abzc, abqc, abgc, abcc…
Nombre d'occurrences {}: /ab{1,3}c/ match pour abc, abbc et abbbc
Choix |: /abc|def/ match pour abc ou def

Séquence de modèles ():
	  $chaine = "Mon poulet coûte 18.07 Euros";
	  $chaine =~ /-?(\d+)\.?(\d+)/;
	  # $chaine contient alors 18.07
	  # la variable $1 vaut 18 et la variable $2 vaut 07





Page réalisée par Christian Favier