Merci pour ces tutoriels qui, entre autres, m'ont poussé à mettre à jour ma distribution.
En ce qui concerne ce volet particulier, la nouvelle syntaxe est très déconcertante, et à première lecture je l'ai trouvée plutôt incongrue (Je m'attendais plutôt à l'introduction de nouvelles fonctionnalités sur la base de la syntaxe de perl 5). Mais au final il y a des choses intéressantes, notamment les opérations sur les classes de caractères, les alternatives les plus longues, les conjonctions. À noter aussi que le lookbehind n'a plus l'obligation de taille fixe comme en perl 5.
Je pense qu'une des idées générales est de déporter une partie des problèmes que l'on a pour habitude de résoudre avec une regex perl 5 vers la grammaire perl 6. Je dis ça parce que certaines fonctionnalités ne se retrouvent pas en perl 6 (même avec l'adverbe :P5) comme par exemple les séquences d'échappement \G \K, la section (?(DEFINE)...) ou bien les verbes de contrôle du bactracking. Un peu comme si l'utilisation d'une de ces facilités devenait le signe de plutôt en passer par la définition d'une grammaire pour ensuite parser. Pourquoi pas, mais ne perd-on pas en légèreté?
À propos du fait qu'il faille échapper tout ce qui bouge, bien que ce soit contraignant, je pense que l'intention qu'il y a derrière est de pouvoir rendre disponible un maximum de caractères de la table ascii pour des fonctionnalités à venir. Certes on a plus à se demander si tel ou tel caractère doit être échappé (cela dit, c'est déjà le cas en perl 5 puisque les échappements inutiles sont ignorés), mais d'un autre coté ça peut alourdir certaines patterns.
Pour conclure, je dirai que c'est très prometteur mais qu'il s'agit encore, trois ans après sa sortie, d'un travail en cours (notamment du fait que toutes les fonctionnalités perl 5 ne soient pas disponibles avec l'adverbe :P5).
Coquilles relevées dans le tutoriel:
2-2. Littéraux:Je me suis demandé si c'était la sortie qui était en commentaire et je me suis dit que lorsque la pattern était un littéral, alors le résultat renvoyé était le premier champ (délimité par des caractères blancs) qui correspondait à la pattern. Eh! Pas folle la guêpe!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 my $chaîne = "Esperluette est le nom parfois donné au signe &"; if $chaîne ~~ m/ perl / { say "$chaîne contient 'perl'"; # -> esperluette contient 'perl' }
2-10-2. Assertions arrière: say "tititoto" ~~ rx{ toto <?after titi>}; # -> toto: L'assertion devrait-être placée à la position du premier t: say "tititoto" ~~ rx{ <?after titi> toto }; # -> toto.
Partager