• Aucun résultat trouvé

Chaque pas est de la forme n <x> <y> où <x> est la partie de la chaîne reconnue et <y> est la partie de la chaîne non encore reconnue. | 1: STAR indique que Perl est rendu à la ligne 1 de la phase de compilation vue précédemment. Voir Débogage des expressions rationnelles in perldebguts pour de plus amples informations.

Une autre méthode pour déboguer les expressions rationnelles consiste à inclure des instructions print dans l’expression rationnelle.

"that this" =~ m@(?{print "Start at position ", pos, "\n";}) t(?{print "t1\n";}) h(?{print "h1\n";}) i(?{print "i1\n";}) s(?{print "s1\n";}) | t(?{print "t2\n";}) h(?{print "h2\n";}) a(?{print "a2\n";}) t(?{print "t2\n";})

(?{print "Done at position ", pos, "\n";}) @x; qui affiche : Start at position 0 t1 h1 t2 h2 a2 t2 Done at position 4

8.4

BUGS

Les expressions d’évaluation de code, les expressions conditionnelles et les expressions indépendantes sont expérimen- tales. Ne les utilisez pas dans du code de production. Pas encore.

8.5

VOIR AUSSI

Ce document n’est qu’un simple tutoriel. Pour une documentation complète sur les expressions rationnelles en Perl, voir perlre.

Pour plus d’informations sur l’opérateur de mise en correspondance m// et l’opérateur de substitution s///, voir Opéra- teurs d’expression rationnelle in perlop. Pour plus d’informations sur les opérations de découpage via split, voir split in perlfunc.

Un très bon livre sur l’utilisation des expressions rationnelles, voir le livre Mastering Regular Expressions par Jeffrey Friedl (édité par O’Reilly, ISBN 1556592-257-3) (N.d.t: une traduction française existe.)

8.6

AUTEURS ET COPYRIGHT

Copyright (c) 2000 Mark Kvale Tous droits réservés.

Ce document peut être distribué sous les mêmes conditions que Perl lui-même.

8.6.1

Remerciements

L’exemple des codons dans une chaîne d’ADN est librement inspiré de l’exemple de codes ZIP du chapitre 7 de Mastering Regular Expressions.

L’auteur tient à remercier Jeff Pinyan, Andrew Johnson, Peter Haworth, Ronald J Kimball et Joe Smith pour leur aide et leurs commentaires.

8.7

TRADUCTION

8.7.1

Version

Cette traduction française correspond à la version anglaise distribuée avec perl 5.10.0. Pour en savoir plus concernant ces traductions, consultezhttp://perl.enstimac.fr/.

8.7.2

Traducteur

Traduction initiale et mise à jour vers 5.10.0 : Paul Gaborit Paul.Gaborit at enstimac.fr.

8.7.3

Relecture

Chapitre 9

perlboot

Tutoriel pour l’orienté objet à destination des débutants

9.1

DESCRIPTION

Si vous n’êtes pas familier avec les notions de programmation orientée objet d’autres langages, certaines documenta- tions concernant les objets en Perl doivent vous sembler décourageantes. Ces documents sont perlobj, la référence sur l’utilisation des objets, et perltoot qui présente, sous forme de tutoriel, les particularités des objets en Perl.

Ici nous utiliserons une approche différente en supposant que vous n’avez aucune expérience préalable avec l’objet. Il est quand même souhaitable de connaître les subroutines (perlsub), les références (perlref et autres) et les paquetages (perlmod). Essayez de vous familiariser avec ces concepts si vous ne l’avez pas déjà fait.

9.1.1

Si nous pouvions parler aux animaux...

Supposons un instant que les animaux parlent : sub Boeuf::fait {

print "un Boeuf fait mheuu !\n"; }

sub Cheval::fait {

print "un Cheval fait hiiii !\n"; }

sub Mouton::fait {

print "un Mouton fait bêêê !\n" }

Boeuf::fait; Cheval::fait; Mouton::fait; Le résultat sera :

un Boeuf fait mheuu ! un Cheval fait hiiii ! un Mouton fait bêêê !

Ici, rien de spectaculaire. De simples subroutines, bien que dans des paquetages séparés, appelées en utilisant leur nom complet (incluant le nom du paquetage). Créons maintenant un troupeau :

# Boeuf::fait, Cheval::fait, Mouton::fait comme au-dessus @troupeau = qw(Boeuf Boeuf Cheval Mouton Mouton);

foreach $animal (@troupeau) { &{$animal."::fait"};

Le résultat sera :

un Boeuf fait mheuu ! un Boeuf fait mheuu ! un Cheval fait hiiii ! un Mouton fait bêêê ! un Mouton fait bêêê !

Super. Mais l’utilisation de références symboliques vers les subroutines fait est un peu déplaisante. Nous comptons sur le mode no strict subs ce qui n’est certainement pas recommandé pour de gros programmes. Et pourquoi est-ce nécessaire ? Parce que le nom du paquetage semble inséparable du nom de la subroutine que nous voulons appeler dans ce paquetage.

L’est-ce vraiment ?

9.1.2

Présentation de l’appel de méthodes via l’opérateur flèche

Pour l’instant, disons que Class->method appelle la subroutine method du paquetage Class. (Ici, « Class » est utilisé dans le sens « catégorie » et non dans son sens « universitaire ».) Ce n’est pas tout à fait vrai mais allons-y pas à pas. Nous allons maintenant utiliser cela :

# Boeuf::fait, Cheval::fait, Mouton::fait comme au-dessus Boeuf->fait;

Cheval->fait; Mouton->fait; À nouveau, le résultat sera :

un Boeuf fait mheuu ! un Cheval fait hiiii ! un Mouton fait bêêê !

Ce n’est pas encore super : même nombre de caractères, que des constantes, pas de variables. Mais maintenant, on peut séparer les choses :

$a = "Boeuf";

$a->fait; # appelle Boeuf->fait

Ah ! Maintenant que le nom du paquetage est séparé du nom de la subroutine, on peut utiliser un nom de paquetage variable. Et cette fois, nous avons quelque chose qui marche même lorsque use strict refs est actif.

9.1.3

Et pour tout un troupeau

Prenons ce nouvel appel via l’opérateur flèche et appliquons-le dans l’exemple du troupeau : sub Boeuf::fait {

print "un Boeuf fait mheuu !\n"; }

sub Cheval::fait {

print "un Cheval fait hiiii !\n"; }

sub Mouton::fait {

print "un Mouton fait bêêê !\n" }

@troupeau = qw(Boeuf Boeuf Cheval Mouton Mouton); foreach $animal (@troupeau) {

$animal->fait; }

Ça y est ! Maintenant tous les animaux parlent et sans utiliser de référence symbolique.

Mais regardez tout ce code commun. Toutes les routines fait ont une structure similaire : un opérateur print et une chaîne qui contient un texte identique, exceptés deux mots. Ce serait intéressant de pouvoir factoriser les parties communes au cas où nous déciderions plus tard de changer fait en dit par exemple.

Il y a réellement moyen de le faire mais pour cela nous devons tout d’abord en savoir un peu plus sur ce que l’opérateur flèche peut faire pour nous.