http://www.ed-diamond.com http://www.gnulinuxmag.com http://www.linux-pratique.com http://www.miscmag.com

Documents pareils
Optimiser TileCache. II. La configuration des ressources WMS.

LICENCE SNCF OPEN DATA

Licence ODbL (Open Database Licence) - IdéesLibres.org

LICENCE SNCF OPEN DATA

Réutilisation d informations publiques provenant des Archives départementales de Saône-et-Loire

Conditions générales de vente

CONTRAT DE LICENCE DE REUTILISATION DES INFORMATIONS PUBLIQUES MONTPELLIER AGGLOMERATION EN ACCES LIBRE

Conditions Générales d utilisation de l Application «Screen Mania Magazine»

01V96i Editor Manuel d'installation

TERMES ET CONDITIONS POUR L'UTILISATEUR de "emblue"

L INFORMATION DU CREANCIER MUNI DE SURETE... 2

Les Imprimantes EOLE 2.3. Documentation sous licence Creative Commons by-nc-sa - EOLE (http ://eole.orion.education.fr) révisé : Janvier 2014

Chapitre 1 Qu est-ce qu une expression régulière?

Cours n 3 Valeurs informatiques et propriété (2)

Sauvegarder la base de données de Drupal avec le module Backup and Migrate

WIPO Training of trainers Program on Effective Intellectual Property Asset Management by Small and Medium-Sized Enterprises (SMEs)

Par courrier Complétez votre Carte-réponse après l'avoir complétée et renvoyez-la à l'adresse suivante :

Les clients GNU/Linux

CONDITIONS GENERALES D UTILISATION. L application VAZEE et le site internet sont édités par :

CONDITIONS PARTICULIERES NUMEROS SVA

PUBLICITÉ ET CRÉDIT À LA CONSOMMATION. Les modifications apportées par la Loi du 1 er juillet 2010

[BASE DE DONNEES BSPACE]

Convention de Licence Érudit (Open Source)

directement ou indirectement, par le biais d une ou plusieurs applications de niveau intermédiaire et c) ajoute des fonctionnalités significatives et

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

STAGE IREM 0- Premiers pas en Python

Programme awk------introduction rapide

Conditions générales de vente et d utilisation

Plate-forme collaborative Claroline Présentation et philosophie de Claroline

[Contractant] [Agence spatiale européenne] Licence de propriété intellectuelle de l'esa pour les besoins propres de l'agence

Loi n o 2000/011 du 19 décembre 2000 relative au droit d auteur et aux droits voisins. Des dispositions générales

La Faculté de Droit Virtuelle est la plate-forme pédagogique de la Faculté de Droit de Lyon

LA CYBER COMPAGNIE 3 7 r u e g u i b a l M A R S E I L L E Tel : Site :

CONDITIONS PARTICULIERES D'HÉBERGEMENT WEB

Convention N 2013/P1/MMSH/015

CONTRAT DE CESSION DE DROITS D AUTEUR «INTERVENTION FILMEE»

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

Politique d'enregistrement.eus

Firewall: Architecture et déploiement

par les législations des États membres ont des effets

LICENCE D UTILISATION DU LOGICIEL ACOUBAT SOUND VERSION 7

Contrat d'assistance Technique PyKota entre :

PLAN DE WARRANTS 2014 EMISSION ET CONDITIONS D EXERCICE

GARANTIE DE LA PARTIE UTILISATRICE DES CERTIFICATS SSL TBS INTERNET X509

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

ENTRE LES SOUSSIGNÉS :

Manuela Dournes Juillet

Les définitions suivantes ne s appliquent qu aux présentes Conditions d utilisation du Site API de Preva :

1.7 Start People SA se réserve le droit souverain de modifier, ajouter ou supprimer des dispositions dans le cadre du présent règlement.

La Haute disponibilité des modules EOLE

Version en date du 01 avril 2010

Contrat de conception, reéalisation et hébergement de site web

CONDITIONS PARTICULIERES D'ENREGISTREMENT, DE RENOUVELLEMENT ET DE TRANSFERT DE NOMS DE DOMAINE

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

Licence d Utilisation des Produits Pléiades attribués à Tarif Préférentiel aux Utilisateurs Institutionnels Autorisés

Charte de nommage du «.tn»

Manuel d'utilisation

SOFTCORNER SAS 44 rue Cauchy ARCUEIL Tél :

Paiement de factures aux entreprises créancières RBC Guide du client

Diffusion AFRISTAT. Quels droits accorder aux utilisateurs? - sur les données - sur les documents numériques

REGLEMENT DU JEU CONCOURS 1 TABLETTE TACTILE A GAGNER

KOSMOPOLEAD CHARTE DE BONNE CONDUITE DES UTILISATEURS

TERMES D'UTILISATION :

CONDITIONS GENERALES DE VENTE A DISTANCE DES PRODUITS DE TESTS ET DIAGNOSTICS EN LIGNE SUR LE SITE INTERNET BOUTIQUE AFNOR CERTIFICATION

Accès Gratuit - Conditions Générales d'utilisation

CONTRAT D EDITION. M...demeurant

TOURNAGE VIDEO. «Titre Conférence» «date et lieu»

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Sommaire. 1. Préambule

CONDITIONS GENERALES D ACHATS FRANCE - ELEVATEUR

CONTRAT DE MAINTENANCE

Veuillez lire les présentes modalités et conditions du service (les «CONDITIONS») avant d utiliser le présent site.

Conditions Générales de Vente

Condition générales d'utilisation sur le site et pour toute prestation gratuite sur le site

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Mettre en place un formulaire dans le site avec le module webform

CODE PROFESSIONNEL. déontologie

SOS Info: Traitement de textes. 1. Structurer un document. 2. Enregistrer un document

LOI N /AN PORTANT PROTECTION DE LA PROPRIETE LITTERAIRE ET ARTISTIQUE

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

MANITOWOC. Bulletin d'orientation de l'entreprise. Circulaire originale En remplacement de la circulaire 103 datée du 22 septembre 1999

CA Desktop Migration Manager

CONDITIONS GENERALES D'ABONNEMENT Particuliers V août 2008

Manuel d utilisation NETexcom

PROPOSITIONS POUR LES ARTISTES INTERPRÈTES

Conditions générales. Utilisateurs de machine à affranchir

BNP PARIBAS ISABEL CONDITIONS GÉNÉRALES

CONVENTION ENTRE LES SOUSSIGNÉS

T E L E V I S I O N CONTRAT DE CESSION DE DROITS D'AUTEUR ENREGISTREMENT ET EXPLOITATION AUDIOVISUELLE MISE EN SCENE

Portail clients GCC (GlobalSign Certificate Center) Conditions d'utilisation du service

HEBERG-24. Table des Matières. Heberg-24

Live box et Nas Synology

CONTRAT DE LICENCE D UTILISATION DU LOGICIEL MORPH M SOUS LA FORME MORPH M PYTHON

CONCOURS «Du bonheur dans votre frigo!» RÈGLEMENTS

Contrat de conception d'un site Web Maintenance Hébergement

ADDENDA AU CONTRAT BLACKBERRY SOLUTION DE LICENCE POUR WATCHDOX CLOUD DE BLACKBERRY («le ADDENDA»)

Microsoft Live Messenger

1 - PREAMBULE - OBJET

Applicable sur le site à compter du 1 Février 2015

Transcription:

Ceci est un extrait électronique d'une publication de Diamond Editions : http://www.ed-diamond.com Retrouvez sur le site tous les anciens numéros en vente par correspondance ainsi que les tarifs d'abonnement. Pour vous tenir au courant de l'actualité du magazine, visitez : http://www.gnulinuxmag.com Ainsi que : http://www.linux-pratique.com et http://www.miscmag.com

Ceci est un extrait électronique d'une publication de Diamond Editions http://www.ed-diamond.com Creative Commons Paternité - Pas d'utilisation Commerciale - Pas de Modification 2.0 France Vous êtes libres : de reproduire, distribuer et communiquer cette création au public. Paternité. Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'oeuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'oeuvre). Pas d'utilisation Commerciale. Vous n'avez pas le droit d'utiliser cette création à des fins commerciales. Pas de Modification. Vous n'avez pas le droit de modifier, de transformer ou d'adapter cette création. A chaque réutilisation ou distribution de cette création, vous devez faire apparaître clairement au public les conditions contractuelles de sa mise à disposition. Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits. Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs. Ceci est le Résumé Explicatif du Code Juridique. La version intégrale du contrat est attachée en fin de document et disponible sur : http://creativecommons.org/licenses/by-nc-nd/2.0/fr/legalcode

code Par :: Stéphane Payrard :: Les Mongueurs de Perl :: Perles de Mongueurs Parcourir une chaîne et identifier ses constituants ou tokens est une opération nécessaire pour un analyseur syntaxique. Nous l utiliserons pour analyser un fichier de configuration à la syntaxe triviale. Cette tâche n est qu un prétexte pour l acquisition d idiomes Perl par le lecteur. Nous présentons au passage des paquetages qui permettent cette tâche dans des situations plus complexes. 84 1 De véritables outils d analyse syntaxique La paresse bien comprise est une vertu proclamée du programmeur Perl. Donc, lorsque c est approprié, évitez de faire vous-même l analyse syntaxique. C est toujours complexe et, souvent, il existe des modules qui sont dédiés à cette analyse syntaxique ou qui l incluent. Le terme anglais pour analyseur syntaxique est "parser ". HTML::Parser [1] est idéal pour analyser du HTML. Pour ce qui est du XML, il existe XML::Parser [2] et XML::SAX [3]. Mentionnons au passage des modules de plus haut niveau qui incluent l analyse du XML : XML::Twig [4] de Michel Rodriguez (mongueur toulousain) et AxKit [5] de Matt Sergeant. AxKit travaille en tandem avec le serveur Web Apache. Finalement, si l on doit écrire un analyseur syntaxique complexe, Parse::Yapp [6] de François Désarménien (encore un mongueur!) est un excellent générateur de parser qui est un clone de yacc. Ces outils feront probablement l objet de futurs articles. Finalement, l analyseur syntaxique Parse::RecDescent de Damian Conway sacrifie la rapidité pour la versatilité. Mais, quelquefois, il est plus simple d analyser une chaîne à la main. L idiome Perl pour ce faire est le sujet central de ce collier de perles. 2 L idiome m/\g.../gc Cet idiome présente une manière d utiliser l opérateur m// de recherche dans une chaîne par une expression régulière. Dans la suite, je préférerai respectivement les anglicismes match et regex. En contexte scalaire, l opérateur de match permet de progresser dans une chaîne de caractères. \G est une ancre qui spécifie la position courante dans ladite chaîne. En effet, à chaque chaîne de caractères est attachée une position courante pour la recherche. Cette position est une forme d itérateur pour l opération de match avec la limitation qu un seul itérateur est possible par chaîne. L usage du modificateur /g lors d un match m// permet de mémoriser la position courante de la recherche dans la chaîne. En cas d échec, la valeur de cette position est undef, ce qui n est généralement pas ce qu on veut. L addition du modificateur /c inhibe cette remise à «zéro». Compter le nombre de lignes dans une chaîne Un unligne pour compter le nombre de lignes dans une chaîne : A chaque itération, on part de la fin du match précédent grâce à l ancre \G, puis on saute un minimum de caractères grâce à.*? avant de chercher un saut de ligne. On incrémente alors $nr. On sort de la boucle quand on ne trouve plus de match. Bien sûr, en Perl, on peut procéder de multiples autres manières pour arriver au même résultat : grep { $nr++ if $_ eq \n split, un\ndeux\ntrois\n ; $nr = grep { $_ eq \n split, un\ndeux\ntrois\n ; $s = un\ndeux\ntrois\n $nr = grep { substr $s, eq \n for 0..length($s)-1 La fonction pos() En dehors du match, une regex, la position courante dans une chaîne, est accessible par la fonction pos(). Comme beaucoup de fonctions Perl, elle prend la variable $_ comme argument par défaut. Illustrons par un exemple : $s = Les mongueurs de Perl connaissent bien le langage Perl ; # Affiche 21, la position après la première occurrence de Perl $s =~ m/perl/gc ; print pos($s), \n ; $nr++ while un\ndeux\ntrois\n =~ m/\g.*?\n/gc; # Affiche toujours 21 car pas de match mais pas de remise à zéro # à cause de la présence de l option /c

Perles de Mongueurs 2 L idiome m/\g.../gc suite $s =~ m/python/gc ; print pos($s), \n ; # Affiche 54, la position après la seconde occurrence de Perl $s =~ m/perl/gc ; print pos($s), \n ; # affiche 54\n # Affiche 0. Pas de match et remise à zéro car absence de l option /c. # pos($s) retourne undef qui, utilisé en contexte entier par # l addition du 0, est converti en 0. $s =~ m/python/g ; print pos($s)+0, \n ; Dans la suite, nous nous passerons de =~, car nous effectuerons la recherche dans $_. Illustrons l idiome m/\g.../gc par l écriture d un analyseur naïf de fichier de configuration qui permet de remplir le hash %config avec des couples clé/valeur de configuration. Ainsi, un fichier.myconfig contenant : a = toto b = titi c = tutu reviendra à initialiser %config comme suit : $config{ a = toto ; $config{ b = titi ; $config{ c = tutu ; Découpage en tranches Puisque l objet de ce collier de perles est de présenter des idiomes, rappelons que nous aurions pu exprimer la même chose en terme de tranches de hash : @config{ a, b, c = ( toto, titi, tutu ) que nous pouvons aussi écrire en utilisant qw() pour créer les listes : @config{ qw( a b c ) = qw( toto titi tutu ); Voici le script de lecture du fichier de configuration : my %config; # hash qui contiendra la configuration open I,.myconfig or die $!; while(<i>) { s/[\s;]+/g; # supprime blancs et éventuels points virgules $config{$1 = $2 if m/\g(\w+)=(\w+)/gc; last if m/\g$/gc; # équivalent à : last if pos == length Modules d analyse de fichiers de configuration Étendre le code de cet exemple n aurait que valeur d exercice. II y a déjà pléthore de modules de lecture de fichier de configuration. Dans votre butineur Web favori, tapez Config dans le champ texte de la page http://search.cpan.org/ pour vous en convaincre. Vous y trouverez des paquetages qui vont du plus simple au plus puissant. Le simple : Config::Tiny [7] permet de lire ou d écrire des fichiers dans le style Windows.ini. AppConfig [8] gère non simplement les fichiers de configuration, mais aussi les options de lignes de commande passées lors de l appel d un script Perl. L idiome substr() = "toto" Il est peu connu que la fonction substr() peut être lhs. Ce sigle pour «left hand side» signifie qu une expression peut apparaître dans la partie gauche d une affectation. On sait que substr($str, $debut, $longueur) retourne la sous-chaîne de $str de longueur $longueur commençant à la position $debut. Mais, en mettant cette expression en lhs, cette sous-chaîne est remplacée par la partie droite de l affectation. Exemple : $s = groupe de mongers parisiens ; print substr($s, 10, 7); # affiche mongers substr($s, 10, 7) = mongueurs ; print $s; # affiche groupe de mongeurs parisiens ; Notons que la fonction pos() est aussi lhs de sorte que vous pouvez modifier la position courante dans une chaîne. Visualisation de la progression Revenons à notre script. Notre analyse syntaxique se bloque si le fichier de configuration n a pas le format attendu. Elle boucle alors indéfiniment. Corrigeons cela. En cas d erreur, le script indiquera la position de l erreur, puis sortira. On le fait en insérant comme marqueur la chaîne <*> à la position courante de la chaîne analysée. On sort en affichant cette chaîne modifiée si son analyse ne progresse plus. Adaptons notre script pour afficher la position courante pour ce faire. Nous incluons aussi Data::Dumper pour pouvoir afficher la valeur de %config à la fin du script. use strict; use Data::Dumper my %config; # hash qui contiendra la configuration open I,.myconfig or die $!; while(<i>) { my $pos = pos; # pos() mémorise position la courante s/[\s+;]+//g; $config{$1 = $2 if m/\g(\w+)=(\w+)/gc; last if m/\g$/gc; if ( $pos == pos ) { # la position courante a-t-elle avancé? substr( $_, pos, 0 ) = <*> ; die $_; # meurt si on n a pas avancé dans la chaîne print Dumper(\%config); Les parenthèses ne font pas les listes Notons que, dans notre script ci-dessus, nous appelons la fonction pos() sans utiliser de parenthèses. En Perl, dans l écriture de l appel d une fonction, les parenthèses ne sont là que pour grouper les éléments d une liste, éventuellement vide, de paramètres. En d autres termes, l opérateur de création de liste est la virgule. Ce groupement par les parenthèses est souvent nécessaire car la précédence de l opérateur d affection est plus forte que celle de création de liste. Ainsi les parenthèses sont indispensables dans l expression : Car : substr( $_, pos, 0 ) = <*> ; substr $_, pos, 0 = <*> ; est l équivalent de : substr( $_, pos, (0 = <*> ) ); Cela n a pas de sens car comme le compilateur le signalera alors, une constante ne peut pas être en position lhs. 85

code 86 3 Des idiomes de débogage Pour voir la progression de l analyse, il serait typiquement utile de factoriser le code d affichage de la chaîne avec notre marqueur en une routine print_marked() appelée à chaque invite du débogueur. La documentation [7] sur le débogueur Perl est disponible en français. Rappelons que l on lance Perl en mode débogueur avec l option -d. Lançons perl - d monscript pour déboguer le script monscript ou perl -de 0 pour expérimenter ou l utiliser comme une sorte de ligne de commande. Pour les amateurs de Emacs, utilisez M-x perldb pour obtenir le débogueur en mode fenêtré. Les commandes de base sont similaires à celles de tout débogueur et leur usage est supposé connu. Nous rappelons simplement la syntaxe d appel : s : single step, c est à dire exécution pas à pas ; n : next, pas à pas sauf pour l appel des sousprogrammes ; R : Reprend le débogage au début du programme ; b subname : met un point d arrêt (breakpoint>) au début de la routine subname ; h cmd : aide (help) pour la commande cmd. Toute ligne de commande qui n est pas interprétée comme commande du débogueur l est comme du code Perl dans le package par défaut. Définissons dans ~/.perldb la fonction qui va imprimer une copie de la chaîne avec notre marqueur de position. Si vous utilisez Emacs, ce sera ~/.perldb.ini. Ce fichier est exécuté chaque fois que nous lançons le débogueur. Définissons la fonction print_marked() qui affiche la chaîne analysée avec l addition du marqueur à la position courante : sub print_marked { my ($str) = @_; my $s = $$str; substr($s, pos $$str, 0) = <*> ; print $s; Ainsi pour afficher $_ et son marqueur, nous appellerons notre routine ainsi : print_marked \$_. Notons que nous passons la chaîne par référence car la position attachée à une chaîne n est pas conservée par l opération de copie. Prototypage de routine On aurait pu ajouter un prototype lors de la définition de la routine pour spécifier que le passage de paramètre se fait par référence sans backslash. Définition de la fonction avec prototype : sub print_marked1(\$) {... # prototype \$ L appel sans backslash : print_marked $_. Auquel cas l appel de la fonction se ferait ainsi : print_marked1 $_. Les prototypes ont été créés pour pouvoir définir des routines qui se comportent comme les fonctions prédéfinies. Ainsi une routine qui réimplémenterait push se déclarerait ainsi : sub mon_push (\@@); Cela signifie qu elle attend un tableau qui sera passé par référence et un nombre indéfini de paramètres passé par valeur. Les prototypes sont une fonctionnalité incomplète et baroque. Je la mentionne pour le cas où vous la rencontreriez dans du code. Évitez de l utiliser. Action avant l invite du débogueur A l invite du débogueur, tapons < print_marker \$_. La commande < prend pour paramètre une expression Perl qui est exécutée avant chaque invite suivante du débogueur. Dans notre cas, à chaque invite du débogueur notre fonction sera exécutée et nous pourrons voir où nous en sommes dans l analyse de la chaîne. Factorisation de l analyse de configuration en un module Maintenant, supposons que nous ayons fait de notre analyseur un module Configurateur (donc dans le fichier Configurateur. pm). Cela nous permettra de l utiliser dans d autres programmes. Cela donne : package Configurateur; our %config; sub import { shift; local ($_) = shift; while (1) { m/\g[\s;]+/gc; $config{$1 = $2 if m/\g(\w+)=(\w+)/gc; if ( $pos == pos ) { substr( $_, pos, 0 ) = <*> ; die $_; last if m/\g$/; 1; Il sera utilisé de la manière suivante dans notre programme principal : use YAML Dump ; use Configurateur << EOF ; toto = 4 tutu = 5 EOF print Dump \%Configurateur::config; Ainsi, nous pouvons analyser une chaîne de configuration grâce à use Configurateur toto=4. Cela permet de charger d un seul coup le module et de faire l analyse de la chaîne. En effet, l invocation de use appelle la fonction import() du module invoqué (ici Configurateur avec pour paramètres le nom du module et éventuellement les paramètres additionnels (ici toto=4 ). Comme son nom le suggère, cette invocation est traditionnellement utilisée pour l import de symboles dans le package courant, mais elle l est souvent pour d autres choses. Ainsi, use strict provoque la modification de drapeaux qui affectent le comportement de l interpréteur Perl. Il change le mode de Perl pour interdire des pratiques d écriture incompatibles avec la programmation en grand. Pour varier les plaisirs, nous faisons le listage des données avec YAML. Débogage d un module Dans notre cas, il y a problème pour déboguer. En effet, use est exécuté lors de la phase de compilation alors que le point d arrêt de début de débogue est au début de l exécution. En d autres termes, le débogueur nous donne la main après avoir exécuté le code que nous voulons déboguer. Gênant. Heureusement, b load configurateur permet de mettre un point d arrêt lors de l exécution du module et donc de pouvoir déboguer celui-ci. Taper h b permet de voir les autres usages de la commande de pose de points d arrêt.

Perles de Mongueurs 4 Le saviez-vous? Historique et informations sur des regex Originellement un outil mathématique, les regex sont très liées à l histoire d Unix et l on peut suivre leur trace jusqu à son ancêtre MULTICS. Pourtant, malgré (ou à cause de) cette longue histoire, les systèmes d expressions régulières sont particulièrement cryptiques et toujours mal intégrés au langage. Aujourd hui, Perl est probablement le langage dans lequel les regex sont le mieux intégrées. L introduction de qr a permis de faire des regex des entités de première classe. On dit qu une entité est de première classe dans un langage lorsqu elle peut être manipulée comme une valeur qui peut être affectée à des variables. Les regex comme entités de première classe en Perl5 n ont malheureusement que très peu d intérêt, car si elles permettent d assembler les expressions régulières par morceaux, elles ne permettent pas la gestion des captures. C est un des multiples problèmes liés au regex qui sera résolu par Perl6. De nombreux langages et outils se sont inspirés de Perl, souvent grâce à l usage de la bibliothèque PCRE [9] (Perl- Compatible Regular Expressions). Larry Wall remarque : «Perl a souvent été vu comme un langage dans lequel il est facile d écrire des programmes difficiles à lire. Il est drôle que d autres langages aient emprunté aussi vite que possible les expressions régulières Perl». Conscient de ces déficiences, Larry traite du système d expressions régulières [10] du futur Perl6 dans son Apocalypse 5. Les apocalypses sont les documents de conception de Perl6. Apocalypse est à prendre ici dans son sens originel de révélation. Par la totale intégration des expressions régulières au langage, il sera possible de faire de l analyse syntaxique directement en Perl6 sans outils particuliers. Quelques sources d information sur les regex dans le cadre de Perl. L excellent article [11] publié dans Linux mag,«la documentation Perl sur les regex» [12], est disponible en français. Dans un cadre dépassant Perl, Wikipedia propose un article [13] intéressant. Le livre [14] de J. Friedl est une mine. Les pages 312 à 316 de la deuxième édition française (2003) traitent de l idiome m/\g.../gc. Finalement, Dennis Ritchie propose une histoire des regex [15] et des incarnations des regex, de QED à Perl, en passant par ed, sed, grep, ex, vi et awk. 5 Récapitulatif m/\g.../gc est un idiome pour avancer dans l analyse d une chaîne. substr() = toto est un exemple de fonction en position lhs. Nous pouvons personnaliser le débogueur à l aide du fichier ~/.perldb ou ~/.perlddb.ini. Il est possible d exécuter pas à pas le code chargé par use nom_de_module en mettant un point d arrêt au début de l exécution du module avec b load nom_de_module. 6 Recherche de paquetages sur CPAN Cet article mentionne beaucoup de paquetages. Mais vous pouvez faire votre choix sur le site http://search.cpan.org ou un site similaire comme http://kobesearch.cpan.org. Notons que les pages de présentation d un module sur http:// earch.cpan.org comprennent un lien vers http://cpan.ratings. org lorsque quelqu un a posté un commentaire sur ce module. Puisque CPAN est délibérément ouvert à tout contributeur, la qualité est variable. Heureusement, les modules les plus populaires sont critiqués dans cpanratings, ce qui vous permettra de faire votre choix en connaissance de cause. Le lien vers CPAN testers vous donnera aussi de précieux renseignements sur les tests effectués sur différentes architectures logicielles et matérielles. 87 7 Références [1] HTML::Parser : http://search.cpan.org/~gaas/html-parser/ [2] XML::Parser : http://search.cpan.org/~msergeant/xml-parser/ [3] XML::SAX : http://search.cpan.org/~msergeant/xml-sax/ [4] XML::Twig : http://search.cpan.org/~mirod/xml-twig/ [5] AxKit : http://search.cpan.org/~msergeant/axkit/ [6] Parse::Yapp : http://search.cpan.org/~fdesar/parse-yapp/ [7] Config::Tiny : http://search.cpan.org/~adamk/config-tiny/ [8] AppConfig : http://search.cpan.org/~abw/appconfig/ [9] La bibliothèque Perl-compatible regular expressions : http://www.pcre.org/ [10] Les regex dans Perl6 : http://dev.perl.org/perl6/apocalypse/a05.html [11] Article de Sylvain Lhuillier sur les regex : http://sylvain.lhullier.org/publications/intro_perl/chapitre10.html [12] La documentation Perl de référence sur les regex : http://www.mongueurs.net/perlfr/perlre.html [13] Article de Wikipedia sur les regex : http://tinyurl.com/3j3a8 [14] J. Friedl, Maîtrise des expressions régulières. [15] Dennis Ritchie, An incomplete history of the QED Text Editor : http://cm.bell-labs.com/cm/cs/who/dmr/qed.html 8 à vous! Envoyez vos perles à perles@mongueurs.net, elles seront peut-être publiées dans un prochain numéro de Linux Magazine.

Creative Commons Paternité - Pas d'utilisation Commerciale - Pas de Modification 2.0 Creative Commons n'est pas un cabinet d'avocats et ne fournit pas de services de conseil juridique. La distribution de la présente version de ce contrat ne crée aucune relation juridique entre les parties au contrat présenté ci-après et Creative Commons. Creative Commons fournit cette offre de contrat-type en l'état, à seule fin d'information. Creative Commons ne saurait être tenu responsable des éventuels préjudices résultant du contenu ou de l'utilisation de ce contrat. Contrat L'Oeuvre (telle que définie ci-dessous) est mise à disposition selon les termes du présent contrat appelé Contrat Public Creative Commons (dénommé ici «CPCC» ou «Contrat»). L'Oeuvre est protégée par le droit de la propriété littéraire et artistique (droit d'auteur, droits voisins, droits des producteurs de bases de données) ou toute autre loi applicable. Toute utilisation de l'oeuvre autrement qu'explicitement autorisée selon ce Contrat ou le droit applicable est interdite. L'exercice sur l'oeuvre de tout droit proposé par le présent contrat vaut acceptation de celui-ci. Selon les termes et les obligations du présent contrat, la partie Offrante propose à la partie Acceptante l'exercice de certains droits présentés ci-après, et l'acceptant en approuve les termes et conditions d'utilisation. 1. Définitions a. «Oeuvre» : oeuvre de l'esprit protégeable par le droit de la propriété littéraire et artistique ou toute loi applicable et qui est mise à disposition selon les termes du présent Contrat. b. «Oeuvre dite Collective» : une oeuvre dans laquelle l'oeuvre, dans sa forme intégrale et non modifiée, est assemblée en un ensemble collectif avec d'autres contributions qui constituent en elles-mêmes des oeuvres séparées et indépendantes. Constituent notamment des Oeuvres dites Collectives les publications périodiques, les anthologies ou les encyclopédies. Aux termes de la présente autorisation, une oeuvre qui constitue une Oeuvre dite Collective ne sera pas considérée comme une Oeuvre dite Dérivée (telle que définie ci-après). c. «Oeuvre dite Dérivée» : une oeuvre créée soit à partir de l'oeuvre seule, soit à partir de l'oeuvre et d'autres oeuvres préexistantes. Constituent notamment des Oeuvres dites Dérivées les traductions, les arrangements musicaux, les adaptations théâtrales, littéraires ou cinématographiques, les enregistrements sonores, les reproductions par un art ou un procédé quelconque, les résumés, ou toute autre forme sous laquelle l'oeuvre puisse être remaniée, modifiée, transformée ou adaptée, à l'exception d'une oeuvre qui constitue une Oeuvre dite Collective. Une Oeuvre dite Collective ne sera pas considérée comme une Oeuvre dite Dérivée aux termes du présent Contrat. Dans le cas où l'oeuvre serait une composition musicale ou un enregistrement sonore, la synchronisation de l'oeuvre avec une image animée sera considérée comme une Oeuvre dite Dérivée pour les propos de ce Contrat. d. «Auteur original» : la ou les personnes physiques qui ont créé l'oeuvre. e. «Offrant» : la ou les personne(s) physique(s) ou morale(s) qui proposent la mise à disposition de l'oeuvre selon les termes du présent Contrat. f. «Acceptant» : la personne physique ou morale qui accepte le présent contrat et exerce des droits sans en avoir violé les termes au préalable ou qui a reçu l'autorisation expresse de l'offrant d'exercer des droits dans le cadre du présent contrat malgré une précédente violation de ce contrat. 2. Exceptions aux droits exclusifs. Aucune disposition de ce contrat n'a pour intention de réduire, limiter ou restreindre les prérogatives issues des exceptions aux droits, de l'épuisement des droits ou d'autres limitations aux droits exclusifs des ayants droit selon le droit de la propriété littéraire et artistique ou les autres lois applicables. 3. Autorisation. Soumis aux termes et conditions définis dans cette autorisation, et ceci pendant toute la durée de protection de l'oeuvre par le droit de la propriété littéraire et artistique ou le droit applicable, l'offrant accorde à l'acceptant l'autorisation mondiale d'exercer à titre gratuit et non exclusif les droits suivants : a. reproduire l'oeuvre, incorporer l'oeuvre dans une ou plusieurs Oeuvres dites Collectives et reproduire l'oeuvre telle qu'incorporée dans lesdites Oeuvres dites Collectives; b. distribuer des exemplaires ou enregistrements, présenter, représenter ou communiquer l'oeuvre au public par tout procédé technique, y compris incorporée dans des Oeuvres Collectives; c. lorsque l'oeuvre est une base de données, extraire et réutiliser des parties substantielles de l'oeuvre. Les droits mentionnés ci-dessus peuvent être exercés sur tous les supports, médias, procédés techniques et formats. Les droits cidessus incluent le droit d'effectuer les modifications nécessaires techniquement à l'exercice des droits dans d'autres formats et procédés techniques. L'exercice de tous les droits qui ne sont pas expressément autorisés par l'offrant ou dont il n'aurait pas la gestion demeure réservé, notamment les mécanismes de gestion collective obligatoire applicables décrits à l'article 4(d). 4. Restrictions. L'autorisation accordée par l'article 3 est expressément assujettie et limitée par le respect des restrictions suivantes : a. L'Acceptant peut reproduire, distribuer, représenter ou communiquer au public l'oeuvre y compris par voie numérique uniquement selon les termes de ce Contrat. L'Acceptant doit inclure une copie ou l'adresse Internet (Identifiant Uniforme de Ressource) du présent Contrat à toute reproduction ou enregistrement de l'oeuvre que l'acceptant distribue, représente ou communique au public y compris par voie numérique. L'Acceptant ne peut pas offrir ou imposer de conditions d'utilisation de l'oeuvre qui altèrent ou restreignent les termes du présent Contrat ou l'exercice des droits qui y sont accordés au bénéficiaire. L'Acceptant ne peut pas céder de droits sur l'oeuvre. L'Acceptant doit conserver intactes toutes les informations qui renvoient à ce Contrat et à l'exonération de responsabilité. L'Acceptant ne peut pas reproduire, distribuer, représenter ou communiquer au public l'oeuvre, y compris par voie numérique, en utilisant une mesure technique de contrôle d'accès ou de contrôle d'utilisation qui serait contradictoire avec les termes de cet Accord contractuel. Les mentions ci-dessus s'appliquent à l'oeuvre telle qu'incorporée dans une Oeuvre dite Collective, mais, en dehors de l'oeuvre en ellemême, ne soumettent pas l'oeuvre dite Collective, aux termes du présent Contrat. Si l'acceptant crée une Oeuvre dite Collective, à la demande de tout Offrant, il devra, dans la mesure du possible, retirer de l'oeuvre dite Collective toute référence au dit Offrant, comme demandé. Si l'acceptant crée une Oeuvre dite Collective, à la demande de tout Auteur, il devra, dans la mesure du possible, retirer de l'oeuvre dite Collective toute référence au dit Auteur, comme demandé.

b. L'Acceptant ne peut exercer aucun des droits conférés par l'article 3 avec l'intention ou l'objectif d'obtenir un profit commercial ou une compensation financière personnelle. L'échange de l'oeuvre avec d'autres Oeuvres protégées par le droit de la propriété littéraire et artistique par le partage électronique de fichiers, ou par tout autre moyen, n'est pas considéré comme un échange avec l'intention ou l'objectif d'un profit commercial ou d'une compensation financière personnelle, dans la mesure où aucun paiement ou compensation financière n'intervient en relation avec l'échange d'oeuvres protégées. c. Si l'acceptant reproduit, distribue, représente ou communique l'oeuvre au public, y compris par voie numérique, il doit conserver intactes toutes les informations sur le régime des droits et en attribuer la paternité à l'auteur Original, de manière raisonnable au regard au médium ou au moyen utilisé. Il doit communiquer le nom de l'auteur Original ou son éventuel pseudonyme s'il est indiqué ; le titre de l'oeuvre Originale s'il est indiqué ; dans la mesure du possible, l'adresse Internet ou Identifiant Uniforme de Ressource (URI), s'il existe, spécifié par l'offrant comme associé à l'oeuvre, à moins que cette adresse ne renvoie pas aux informations légales (paternité et conditions d'utilisation de l'oeuvre). Ces obligations d'attribution de paternité doivent être exécutées de manière raisonnable. Cependant, dans le cas d'une Oeuvre dite Collective, ces informations doivent, au minimum, apparaître à la place et de manière aussi visible que celles à laquelle apparaissent les informations de même nature. d. Dans le cas où une utilisation de l'oeuvre serait soumise à un régime légal de gestion collective obligatoire, l'offrant se réserve le droit exclusif de collecter ces redevances par l'intermédiaire de la société de perception et de répartition des droits compétente. Sont notamment concernés la radiodiffusion et la communication dans un lieu public de phonogrammes publiés à des fins de commerce, certains cas de retransmission par câble et satellite, la copie privée d'oeuvres fixées sur phonogrammes ou vidéogrammes, la reproduction par reprographie. 5. Garantie et exonération de responsabilité a. En mettant l'oeuvre à la disposition du public selon les termes de ce Contrat, l'offrant déclare de bonne foi qu'à sa connaissance et dans les limites d'une enquête raisonnable : i. L'Offrant a obtenu tous les droits sur l'oeuvre nécessaires pour pouvoir autoriser l'exercice des droits accordés par le présent Contrat, et permettre la jouissance paisible et l'exercice licite de ces droits, ceci sans que l'acceptant n'ait aucune obligation de verser de rémunération ou tout autre paiement ou droits, dans la limite des mécanismes de gestion collective obligatoire applicables décrits à l'article 4(e); b. L'Oeuvre n'est constitutive ni d'une violation des droits de tiers, notamment du droit de la propriété littéraire et artistique, du droit des marques, du droit de l'information, du droit civil ou de tout autre droit, ni de diffamation, de violation de la vie privée ou de tout autre préjudice délictuel à l'égard de toute tierce partie. c. A l'exception des situations expressément mentionnées dans le présent Contrat ou dans un autre accord écrit, ou exigées par la loi applicable, l'oeuvre est mise à disposition en l'état sans garantie d'aucune sorte, qu'elle soit expresse ou tacite, y compris à l'égard du contenu ou de l'exactitude de l'oeuvre. 6. Limitation de responsabilité. A l'exception des garanties d'ordre public imposées par la loi applicable et des réparations imposées par le régime de la responsabilité vis-à-vis d'un tiers en raison de la violation des garanties prévues par l'article 5 du présent contrat, l'offrant ne sera en aucun cas tenu responsable vis-à-vis de l'acceptant, sur la base d'aucune théorie légale ni en raison d'aucun préjudice direct, indirect, matériel ou moral, résultant de l'exécution du présent Contrat ou de l'utilisation de l'oeuvre, y compris dans l'hypothèse où l'offrant avait connaissance de la possible existence d'un tel préjudice. 7. Résiliation a. Tout manquement aux termes du contrat par l'acceptant entraîne la résiliation automatique du Contrat et la fin des droits qui en découlent. Cependant, le contrat conserve ses effets envers les personnes physiques ou morales qui ont reçu de la part de l'acceptant, en exécution du présent contrat, la mise à disposition d'oeuvres dites Dérivées, ou d'oeuvres dites Collectives, ceci tant qu'elles respectent pleinement leurs obligations. Les sections 1, 2, 5, 6 et 7 du contrat continuent à s'appliquer après la résiliation de celui-ci. b. Dans les limites indiquées ci-dessus, le présent Contrat s'applique pendant toute la durée de protection de l'oeuvre selon le droit applicable. Néanmoins, l'offrant se réserve à tout moment le droit d'exploiter l'oeuvre sous des conditions contractuelles différentes, ou d'en cesser la diffusion; cependant, le recours à cette option ne doit pas conduire à retirer les effets du présent Contrat (ou de tout contrat qui a été ou doit être accordé selon les termes de ce Contrat), et ce Contrat continuera à s'appliquer dans tous ses effets jusqu'à ce que sa résiliation intervienne dans les conditions décrites ci-dessus. 8. Divers a. A chaque reproduction ou communication au public par voie numérique de l'oeuvre ou d'une Oeuvre dite Collective par l'acceptant, l'offrant propose au bénéficiaire une offre de mise à disposition de l'oeuvre dans des termes et conditions identiques à ceux accordés à la partie Acceptante dans le présent Contrat. b. La nullité ou l'inapplicabilité d'une quelconque disposition de ce Contrat au regard de la loi applicable n'affecte pas celle des autres dispositions qui resteront pleinement valides et applicables. Sans action additionnelle par les parties à cet accord, lesdites dispositions devront être interprétées dans la mesure minimum nécessaire à leur validité et leur applicabilité. c. Aucune limite, renonciation ou modification des termes ou dispositions du présent Contrat ne pourra être acceptée sans le consentement écrit et signé de la partie compétente. d. Ce Contrat constitue le seul accord entre les parties à propos de l'oeuvre mise ici à disposition. Il n'existe aucun élément annexe, accord supplémentaire ou mandat portant sur cette Oeuvre en dehors des éléments mentionnés ici. L'Offrant ne sera tenu par aucune disposition supplémentaire qui pourrait apparaître dans une quelconque communication en provenance de l'acceptant. Ce Contrat ne peut être modifié sans l'accord mutuel écrit de l'offrant et de l'acceptant. e. Le droit applicable est le droit français. Creative Commons n'est pas partie à ce Contrat et n'offre aucune forme de garantie relative à l'oeuvre. Creative Commons décline toute responsabilité à l'égard de l'acceptant ou de toute autre partie, quel que soit le fondement légal de cette responsabilité et quel que soit le préjudice subi, direct, indirect, matériel ou moral, qui surviendrait en rapport avec le présent Contrat. Cependant, si Creative Commons s'est expressément identifié comme Offrant pour mettre une Oeuvre à disposition selon les termes de ce Contrat, Creative Commons jouira de tous les droits et obligations d'un Offrant. A l'exception des fins limitées à informer le public que l'oeuvre est mise à disposition sous CPCC, aucune des parties n'utilisera la marque «Creative Commons» ou toute autre indication ou logo afférent sans le consentement préalable écrit de Creative Commons. Toute utilisation autorisée devra être effectuée en conformité avec les lignes directrices de Creative Commons à jour au moment de l'utilisation, telles qu'elles sont disponibles sur son site Internet ou sur simple demande. Creative Commons peut être contacté à http://creativecommons.org/.