Introduction (rapide) à Perl



Documents pareils
Recherche dans un tableau

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Perl Orienté Objet BioPerl There is more than one way to do it

Algorithmique et Programmation, IMA

TP 1. Prise en main du langage Python


Initiation à la programmation en Python

Traitement de texte : Quelques rappels de quelques notions de base

Programmation C++ (débutant)/instructions for, while et do...while

Cours Informatique Master STEP

1. Structure d'un programme FORTRAN 95

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programme awk------introduction rapide

Utilisation d objets : String et ArrayList

Télécom Nancy Année

LECON 2 : PROPRIETES DE L'AFFICHAGE Version aout 2011

Langage Perl. Introduction & Retour d'expérience. Journée du 30/11/ S. Gallina - GEPV - 1/42

Compte-rendu de projet de Système de gestion de base de données

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

I. Introduction aux fonctions : les fonctions standards

Présentation du langage et premières fonctions

Chapitre 2 Devine mon nombre!

Navigation dans Windows

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

L informatique en BCPST

STAGE IREM 0- Premiers pas en Python

Plan du cours. Historique du langage Nouveautés de Java 7

A.-M. Cubat PMB - Import de notices à partir d un tableur Page 1 Source :

Cours Langage C/C++ Programmation modulaire

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Bases de programmation. Cours 5. Structurer les données

1 TD 2 : Construction d'une chier Acrobat et envoi par

Introduction à MATLAB R

Cours d algorithmique pour la classe de 2nde

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Dans la série. présentés par le site FRAMASOFT

Programmation système I Les entrées/sorties

1. Introduction Création d'une requête...2

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

1 Lecture de fichiers

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER

Programmation Objet - Cours II

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Internet Explorer. Microsoft. Sommaire :

< Atelier 1 /> Démarrer une application web

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Conception de circuits numériques et architecture des ordinateurs

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Chapitre 5 : Les procédures stockées PL/SQL

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

TP1 - Prise en main de l environnement Unix.

Quelques éléments de compilation en C et makefiles

GESTION ELECTRONIQUE DE DOCUMENTS

SOLUTION D ENVOI DE SMS POUR PROFESSIONNELS

Chapitre 2. Classes et objets

Onglet sécurité de Windows XP Pro et XP Home

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Éléments d'architecture des ordinateurs

Programmation Web. Madalina Croitoru IUT Montpellier

TABLEAU CROISE DYNAMIQUE

La mémoire. Un ordinateur. L'octet. Le bit

MODE D'EMPLOI DE LA CALCULATRICE POUR LES COURTS SÉJOURS DANS L'ESPACE SCHENGEN

Titre: Version: Dernière modification: Auteur: Statut: Licence:

HP Data Protector Express Software - Tutoriel 3. Réalisation de votre première sauvegarde et restauration de disque

Documentation pour l envoi de SMS

Export et import des RIB et IBAN avec les progiciels LD

EXTRACTION ET RÉINTÉGRATION DE COMPTA COALA DE LA PME VERS LE CABINET

Cours Programmation Système

Le backup LOGOSw (Backup interne)

Langage Java. Classe de première SI

Gestion des utilisateurs : Active Directory

Les clients GNU/Linux

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Utiliser Freemind à l'école

Année Universitaire 2009/2010 Session 2 de Printemps

Gestion d'un parc informatique avec OCS INVENTORY et GLPI

SQL MAP. Etude d un logiciel SQL Injection

Installation locale de JOOMLA SEPIA

Initiation à la Programmation en Logique avec SISCtus Prolog

Introduction à NetCDF

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Comment récupérer ses fichiers quand Windows ne démarre plus

Algorithmique et programmation : les bases (VBA) Corrigé

Notre projet est de réaliser un document

Manuel Utilisateur de l'installation du connecteur Pronote à l'ent

Guide Google Cloud Print

Séance 0 : Linux + Octave : le compromis idéal

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

à l édition de textes

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Terminal Infocomm et Poste Infocomm

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Conventions d écriture et outils de mise au point

Transcription:

Luc Didry Julien Vaubourg LP ASRALL Année universitaire 2009-2010 Université Nancy 2 IUT Nancy-Charlemagne

Table des matières Introduction (rapide) à Perl 1 Qu'est-ce que Perl? 2 2 Document de base 2 3 Déclarer une variable scalaire 2 4 Tableaux 2 5 Tables de hachage (tableaux associatifs) 4 6 Les structures de contrôle 4 7 Les fonctions 5 8 Expressions régulières 5 9 Consulter l'entrée standard 7 10 Manipulation de chiers 7 11 Fonctions diverses 8 12 La magie de Perl 9 13 Plus de Perl 10 1

1 Qu'est-ce que Perl? Perl a été créé par Larry Wall au milieu des années 80 parce que awk montrait ses limites dans le travail qu'il voulait eectuer. L'interpréteur de Perl compile et exécute ensuite le programme en une seule étape. C'est pourquoi les messages d'erreur comportent souvent Execution of programme aborted due to compilation errors. L'orthographe Perl (avec une majuscule) est le plus souvent employée pour parler du langage tandis que perl fera référence à l'interpréteur. 2 Document de base #! / u s r / bin / p e r l use warnings ; use s t r i c t ; Les lignes autres que le shebang, sont appelées des pragmas. Ce sont des indications données au compilateur, lui précisant quelque chose à propos du code. use warnings permet d'obtenir des avertissements de la part de perl lorsqu'il rencontre des éléments suspects dans le programme. Ces avertissements ne modient pas le déroulement du programme mis à part quelques plaintes de temps en temps. Perl est un langage extrêmement permissif mais l'emploi du pragma use strict permet de s'imposer une certaine discipline (déclaration préalable des variables entre autres), ce qui permet souvent d'avoir un code plus compréhensible et plus ecace. Dans les extraits de code de ce polycopié, les deux pragmas sont positionnés. 3 Déclarer une variable scalaire 1 En Perl, les variables ne sont pas typées. Par défaut, en Perl, toutes les variables sont globales, il est donc possible d'y accéder depuis tout endroit du programme. On peut créer des variables locales en les déclarant avec my. Cependant, l'usage du pragma strict nous force à déclarer toutes les variables avec my. Une variable ne sera donc globale que si on prend le soin de la déclarer en dehors de toute boucle ou sous-programme. my $var = "string" ; my $var2 = 4 2 ; my $var3 ; 4 Tableaux 4.1 Déclarer Comme les variables scalaires, les tableaux se déclarent avec my à cause de l'emploi du pragma strict. 1 Une variable scalaire est le nom d'un emplacement ne contenant qu'une seule valeur, au contraire, par exemple, des tableaux ou des tables de hachage. 2

On peut donner des valeurs à un tableau de deux manières diérentes : soit en passant les paramètres séparés par des virgules (et en mettant les chaînes de caractères entre guillemets), soit en utilisant qw qui permet de s'aranchir des guillemets et des virgules. Par contre si une chaîne contient une espace, il faudra remettre les guillemets. my @tab = ( "valeur", 42, "autre" ) ; my @tab2 = qw( v a l e u r 42 a u t r e ) ; 4.2 Accéder p r i n t $tab [ 0 ] ; # A t tention : c ' e s t bien un $ pour a c c é d e r à l ' élément du t a b l e a u $tab [ 0 ] = 4 2 ; p r i n t @tab ; # A f f i c h a g e du contenu : " v a l e u r 42 a u t r e " p r i n t "@tab" ; # A f f i c h a g e de l a t a i l l e du t a b l e a u : 3 On voit ici que @tab ne renvoit pas forcément la même chose selon le contexte dans lequel on l'utilise. On parle ici de contexte de liste et contexte de scalaire 2. Perl renverra automatiquement la valeur nécessaire : $nombre = 42 + @tab ; # Contexte de s c a l a i r e : 42 + 3 = 45 @copie_tab = @tab ; # Contexte de l i s t e : on r e c o p i e " v a l e u r 42 a u t r e " dans @copie_tab 4.3 Les opérateurs pop, push, shift et unshift Les deux premiers permettent de manipuler aisément les tableaux par leur n : pop renvoie la valeur du dernier élément du tableau et supprime ce dernier élément $ l a s t = pop ( @tab ) ; # $ l a s t vaut " a u t r e " e t @tab vaut " v a l e u r 42" pop ( @tab ) ; # On s e c o n t e n t e de supprimer l e d e r n i e r élément push ajoute au contraire des éléments au tableau. push ( @tab, "nouveau" ) ; # @tab vaut " v a l e u r 42 nouveau " Les deux derniers manipulent les tableaux par leur début : shift renvoie la valeur du premier élément du tableau et supprime ce premier élément @tab = qw( v a l e u r 42 a u t r e ) ; $ f i r s t = s h i f t ( @tab ) ; # $ f i r s t vaut " v a l e u r " e t @tab vaut "42 a u t r e " s h i f t ( @tab ) ; # On s e c o n t e n t e de supprimer l e premier élément unshift ajoute au contraire des éléments au tableau. u n s h i f t ( @tab, "nouveau" ) ; # @tab vaut " nouveau 42 a u t r e " 2 On l'a vu précédemment, le scalaire c'est une seule valeur, la liste c'est logiquement plusieurs valeurs. 3

5 Tables de hachage (tableaux associatifs) Une table de hachage est une structure de données comme un tableau, en cela qu'elle peut contenir un nombre quelconque de valeurs et les retrouver à la demande. Cependant, au lieu de repérer les valeurs par un indice numérique, comme avec les tableaux, elles sont repérées par un nom. 5.1 Déclarer my %hash = ( "cle1" => "valeur", "cle2" => 42, "cle3" => "autre", ) ; Il existe d'autres manières d'aecter des valeurs à une table de hachage mais celle-ci a l'avantage d'être la plus lisible. 5.2 Accéder p r i n t $hash {"cle1" ; # A f f i c h e " v a l e u r " $hash {"cle1" = 4 2 ; # A f f e c t a t i o n @tab_cles = keys %hash ; # @tab_cles vaut " c l e 1 c l e 2 c l e 3 " @tab_valeurs = v a l u e s %hash ; # @tab_valeurs vaut "42 42 a u t r e " 6 Les structures de contrôle Les structures if, if else, if elsif, while, do while fonctionnent comme dans la plupart des langages de programmation. Mais comme Perl, c'est trop la classe, on peut faire des raccourcis marrants qui font gagner du temps 3. 6.1 La boucle for Elle est semblable à tous les autres langages usuels. f o r (my $ i = 0 ; $ i <= 4 2 ; $ i++) { p r i n t "$i\n" ; # Attention : p r i n t n ' e f f e c t u e pas de r e t o u r a l a l i g n e automatiquement 6.2 La boucle de parcours foreach foreach permet de parcourir tout un tableau rapidement et sans se préoccuper de sa taille. # Tableau f o r e a c h my $element ( @tab ) { 3 Et le temps c'est de l'argent. De plus, l'argent c'est le nerf de la guerre dans ce bas monde. 4

p r i n t "$element\n" ; # Tableau p a r t i c u l i e r ( s u i t e de nombres ) f o r e a c h my $ i ( 0.. 4 2 ) { # Pour $ i de 0 à 42, i n c l u s p r i n t "$i\n" ; # A f f i c h a g e i d e n t i q u e que c e l u i de l a b o u c l e f o r vue c i avant # Tables de hachage ( t a b l e a u x a s s o c i a t i f s ) f o r e a c h my $ c l e ( keys(%hash ) ) { p r i n t "$hash{$cle\n" ; # A f f i c h e chaque v a l e u r de l a t a b l e de hachage Le second exemple démontre qu'il est aussi possible de remplir un tableau avec les nombres de n à m de façon automatisée : my @tab = ( n..m) ; 7 Les fonctions 7.1 Déclaration sub d i v i s i o n { # Premier argument d i v i s e par l e second r e t u r n $_ [ 0 ] / $_ [ 1 ] ; Il est aussi possible de dénir une ligne permettant de donner aux arguments des noms plus explicites : sub d i v i s i o n { my ( $operande1, $operande2 ) = @_; r e t u r n $operande1 / $operande2 ; 7.2 Appel On utilise l'esperluette & pour indiquer qu'il s'agit d'une fonction (on pourrait s'en passer dans certaines circonstances). p r i n t &d i v i s i o n ( 4 2, 10) ; # A f f i c h e 4. 2 8 Expressions régulières Perl est particulièrement réputé pour sa force sur le traitement des expressions régulières. 5

Pour la syntaxe des expressions régulières, vous pouvez aller sur http://sylvain. lhullier.org/publications/intro_perl/chapitre10.html (vous y trouverez aussi des exercices). 8.1 Recherche L'expression régulière recherchée est appelée motif. On place le motif entre slashes et on utilise = pour indiquer dans quelle variable on doit rechercher le motif. La recherche de motif renverra true ou false dans un contexte de scalaire. i f ( $ f o o =~ / bar /) { p r i n t "" bar " a ete trouve dans \$foo" ; i f ( $ f o o =~ / bar / i ) { p r i n t "" bar ", " bar " ou " BAR " a ete trouve dans \$foo" ; Le i collé à l'arrière du motif permet de faire une recherche insensible a la casse. 8.2 Substitution my $ f o o b a r = "foobarbar" ; $ f o o b a r =~ s / bar / f o o / ; p r i n t $ f o o b a r ; # A f f i c h e : f o o f o o b a r $ f o o b a r = "foobarbar" ; $ f o o b a r =~ s / bar / f o o /g ; # l e " g " permet de ne pas l i m i t e r l a s u b s t i t u t i o n a l a premiere o c c u r e n c e p r i n t $ f o o b a r ; # A f f i c h e : f o o f o o f o o (comme l e c o l l e g e ) On peut également cumuler les options g et i en gi. Il en existe d'autres (pour plus amples informations, RTFM). Sachez aussi qu'un certain nombre de caractères doivent être échappés par un antislash (ex : /.? *...). 8.3 Les classes de caractères Les raccourcis suivants peuvent être utiles 4 : \d : Représente tous les chires (équivalent à [:digit:] ou [0-9]) \w : Représente tous les caractères alphanumériques plus l'underscore, sans les accents (équivalent à [a-za-z0-9_]) \s : Représente tous les caractères d'espacement (espace, passage à la ligne, tabulation, saut de page, retour chariot : équivalent à [ \n\t\f\r]) 8.4 Extraction de sous-chaînes Allez, parce que Perl est trop puissant, on en remet une couche! 4 C'est faux : ils ne peuvent pas être utiles, ils le sont! 6

my $ u r l = "http://www.cpan.org/foobar/" ; my ( $ s i t e, $ d o s s i e r ) = $ u r l =~ / http : \ / \ /www. ( \w+). org /(\w+) \ / ; 9 Consulter l'entrée standard L'entrée standard, c'est le plus souvent le clavier mais ça peut aussi être un chier (si vous faites $./mon_prog < mon_fichier par exemple). w h i l e ( d e f i n e d (my $ f o o = <STDIN>) ) { p r i n t "$foo\n" ; Cette syntaxe demande à l'utilisateur d'entrer du texte au clavier. Celui-ci peut cesser de fournir les entrées par Ctrl+D. $foo contiendra à chaque fois ce qu'a tapé l'utilisateur avant de valider par Entrée. S'il s'agissait d'un chier, $foo contiendra les lignes du chier, l'une après l'autre. On utilise chomp pour supprimer le retour à la ligne qui nalise chaque ligne de texte (quand l'utilisateur tape sur Entrée pour valider son entrée) : my $ f o o = "toto\n" ; p r i n t $ f o o ; # A f f i c h e t o t o s u i v i d ' un r e t o u r a l a l i g n e chomp ( $ f o o ) ; p r i n t $ f o o ; # A f f i c h e t o t o sans r e t o u r a l a l i g n e 10 Manipulation de chiers 10.1 Ouvrir un chier Un descripteur de chier est le nom, dans un programme Perl, d'une connexion d'entrée/sortie entre le processus Perl et le monde extérieur. STDIN, vu plus haut, est un descripteur de chier spécial. my $ f i c h i e r = "fichier.txt" ; open (FICHIER, "<", $ f i c h i e r ) or d i e ( "Impossible d'ouvrir le fichier $fichier : $!\n" ) ; # Ouverture en l e c t u r e s e u l e open (FICHIER, ">", $ f i c h i e r ) or d i e (... ) ; # Ouverture en e c r i t u r e ( r e i n i t i a l i s e l e f i c h i e r ) open (FICHIER, ">>", $ f i c h i e r ) or d i e (... ) ; # Ouverture en e c r i t u r e ( a j o u t e a l a f i n du f i c h i e r ) c l o s e (FICHIER) ; # F a c u l t a t i f ( s e ferme automatiquement a l a f i n du programme ) Il est également possible de d'ouvrir un chier en lecture/écriture ( +> : écrasement, +< : ajout). 10.2 Consulter un chier C'est bien joli d'ouvrir un chier, encore faut-il s'en servir. 7

w h i l e ( d e f i n e d (my $ f o o = <FICHIER>) ) { p r i n t "$foo\n" ; # A f f i c h e chaque l i g n e du f i c h i e r 10.3 Ecrire dans un chier p r i n t FICHIER $ f o o ; # E c r i t $ f o o dans l e f i c h i e r ouvert en e c r i t u r e 10.4 Se placer dans un répertoire Par défaut, Perl se place dans le répertoire d'appel du script. Il cherchera donc, par exemple, les chiers qu'on lui dit d'ouvrir dans ce répertoire. c h d i r ( "/home/asrall" ) ; 10.5 Explorer un répertoire L'opérateur glob permet l'expansion de nom de chier exactement comme dans le shell et donc d'explorer le répertoire : my @ f i c h i e r s P e r l = glob ( "*.pl" ) ; # Remplit un t a b l e a u de tous l e s noms de f i c h i e r s du r e p e r t o i r e courant c o r r e s p o n d a n t au m o t i f 11 Fonctions diverses Rapidement, quelques fonctions que vous aurez sûrement l'occasion d'utiliser : # S i une v a r i a b l e n ' a pas e t e i n i t i a l i s e e, e l l e vaut undef i f ( d e f i n e d $ f o o ) { p r i n t "La variable \$foo a ete definie.\n" ; e l s e { p r i n t "\$foo retourne la valeur undef.\n" ; i f ( d $ f o o ) { p r i n t "$foo est un repertoire.\n" ; i f ( e $ f o o ) { p r i n t "Le fichier $foo existe.\n" ; i f ( f $ f o o ) { p r i n t "$foo est un fichier regulier.\n" ; # Ces f o n c t i o n s qui s e r e s s e m b l e n t sont l e s memes que l a commande t e s t de bash (man t e s t pour t o u t e s l e s v o i r ) my @tab = s p l i t (/ /, $ f o o ) ; # Decompose $ f o o dans l e t a b l e a u @tab d ' a p r e s l e m o t i f ( i c i une e s p a c e ) my $numerique = i n t ( $ f o o ) ; # Cast $ f o o en e n t i e r my $ a l e a t o i r e = rand ($max) ; # Retourne un nombre a l e a t o i r e e n t r e 0 e t $max 8

my $enmajuscules = uc ( $ f o o ) ; # Retourne $ f o o en m a j u s c u l e s my $enminuscules = l c ( $ f o o ) ; # Retourne $ f o o en m inuscules @foo = s o r t ( @foo ) ; # Trie l e t a b l e a u @foo s e l o n l ' o r d r e a s c i i b e t i q u e ( 1, 10, 2, a, e t c. ) @foo = s o r t { $a <=> $b @foo ; # Trie l e t a b l e a u s e l o n l ' o r d r e alphanumerique ( 1, 2, 10, a, e t c. ) 12 La magie de Perl Perl permet d'économiser énormément de caractères, voici quelques raccourcis très utilisés dans la communauté Perl. 12.1 La variable magique f o r ( 1.. 4 2 ) { p r i n t "$_\n" ; f o r e a c h ( @tab ) { p r i n t ; En cas d'absence du nom de variable, $_ prend automatiquement le relais. De plus, en cas d'absence de paramètre, certaines fonctions prennent $_ comme valeur par défaut (c'est le cas ici pour le print du foreach). 12.2 L'opérateur diamant w h i l e (<>) { p r i n t ; Selon le contexte, le diamant peut représenter deux choses diérentes : si un chier est passé en argument à l'appel du script 5, le diamant le lira ligne à ligne, sinon l'utilisateur sera invité à taper au clavier. 12.3 Les parenthèses Perl se passe de la plupart des parenthèses des fonctions. Ces trois lignes sont identiques : chomp ($_) ; chomp $_ ; chomp ; 5 Attention, cette fois ça peut être de la forme $./mon_prog < mon_fichier comme tout à l'heure ou $./mon_prog mon_fichier. 9

13 Plus de Perl Sites : http://perl.developpez.com/cours/?page=sommairetutoriels#tutorielsdebuter http://sylvain.lhullier.org/publications/perl.html http://articles.mongueurs.net/ Livre : Introduction à Perl de Randal L. Schwartz, Tom Phoenix et Brian D. Foy O'Reilly 2006, ISBN : 2-84177-404-X Les modules additionnels de Perl sont disponibles sur http://search.cpan.org 10

Copyright c Luc DIDRY & Julien VAUBOURG, Octobre 2009 Copyleft : cette uvre est soumise aux termes de la licence Creative Commons Paternité - Partage des Conditions Initiales à l'identique 2.0 France http://creativecommons.org/licenses/by-sa/2.0/fr/ http://creativecommons.org/licenses/by-sa/2.0/fr/legalcode Les demandes de permissions supplémentaires peuvent être adressées à lucdidry@free.fr et julien@vaubourg.com Les sources L A TEX sont librement téléchargeables sur http://lucdidry.free.fr/dl.html Le dromadaire Perl est une marque déposée des éditions O'Reilly qui permettent son utilisation relativement à Perl sous certaines conditions 6. Nous les en remercions. 6 http ://oreilly.com/pub/a/oreilly/perl/usage/ 11