OVH Cloud OVH Cloud

mise en page du code et saut de ligne ?

2 réponses
Avatar
ctobini
Bonjour,

J'aurais une question concernant la mise en page du code Perl : il me
semble que Perl n'est normalement pas sensible aux espaces et sauts de
lignes tant qu'une ligne de code n'a pas =E9t=E9 ferm=E9e par ';'.

Cependant, si j'ai une longue ligne du style :

if ($line =3D~
/^(.*;)(\d{2}\/\d{2}\/\d{4}|\d{4}-\d{2}-\d{2})(;[A-Z0-9-]{3,};)([A-Za-z0-9-=
_]{3,};)([A-Za-z0-9-_]{3,};)(\w+);(.*?;;)([0-9
,;]*)$/)

que je veux scinder :

if ($line =3D~ /^(.*;)(\d{2}\/\d{2}\/\d{4}|\d{4}-\d{2}-\d{2})(;[A-Z0-9-

]{3,};)([A-Za-z0-9-_]{3,};)([A-Za-z0-9-_]{3,};)(\w+);(.*?;;)([0-9
,;]*)$/)

j'ai syst=E9matiquement une erreur =E0 la l'interpr=E9tation du code.

Sauriez-vous comment y rem=E9dier ?

En vous remerciant.

C=2E Tobini

2 réponses

Avatar
Paul Gaborit
À (at) 26 Jan 2006 05:06:57 -0800,
"ctobini" écrivait (wrote):
J'aurais une question concernant la mise en page du code Perl : il me
semble que Perl n'est normalement pas sensible aux espaces et sauts de
lignes tant qu'une ligne de code n'a pas été fermée par ';'.


C'est vrai indépendament du ';'. La règle générale serait plutôt :
partout où on peut mettre un espace on peut mettre plusieurs espaces
(dont des sauts de lignes).

Cependant, si j'ai une longue ligne du style :

if ($line =~
/^(.*;)(d{2}/d{2}/d{4}|d{4}-d{2}-d{2})(;[A-Z0-9-]{3,};)([A-Za-z0-9-_]{3,};)([A-Za-z0-9-_]{3,};)(w+);(.*?;;)([0-9
,;]*)$/)

que je veux scinder :

if ($line =~ /^(.*;)(d{2}/d{2}/d{4}|d{4}-d{2}-d{2})(;[A-Z0-9-

]{3,};)([A-Za-z0-9-_]{3,};)([A-Za-z0-9-_]{3,};)(w+);(.*?;;)([0-9
,;]*)$/)

j'ai systématiquement une erreur à la l'interprétation du code.

Sauriez-vous comment y remédier ?


Le problème ici est que, justement, on ne peut pas ajouter un espace
sans changer l'interprétation de l'expression
rationnelle. Heureusement, Perl propose un mécanisme pour cela : le
modificateur /x (les expressions rationnelles étendues).

Le code suivant :

if (m/([a-z]+) d{1,3} ([a-z]+)/) { # sans /x !
...
}

est équivalent à :

if (m/
([a-z]+) # une ou plusieurs lettres minuscules
# suivi d'un blanc
d{1,3} # suivi d'un nombre de 1 à 3 chiffres
# suivi d'un blanc
([a-z]+) # suivi d'une ou plusieurs lettres minuscules
/x) { # tout cela grâce au /x
...
}

Cela permet de couper l'expression où on veut mais aussi de la commenter...

Pour en savoir plus :

perldoc perlop

(section "Gory details of parsing quoted constructs")

ou (en français) :

<http://perl.enstimac.fr/DocFr/perlop.html#les%20d%E9tails%20sordides%20de%20l'interpr%E9tation%20des%20cha%EEnes>


--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Nicolas George
"ctobini" wrote in message
:
J'aurais une question concernant la mise en page du code Perl : il me
semble que Perl n'est normalement pas sensible aux espaces et sauts de
lignes tant qu'une ligne de code n'a pas été fermée par ';'.


Perl est sensible aux espaces et aux retours à la ligne à certains endroits,
en particulier dans les chaînes de caractères et les expressions
rationnelles.

Sauriez-vous comment y remédier ?


Regarde l'option x (extended regular expressions.) des opérateurs
d'expressions rationnelles.