Traitements de textes en Perl

Le langage Perl est particulièrement bien adapté aux manipulations de texte. Nous en voyons ici quelques exemples.

Aide

On rappelle qu'un script script Perl est un fichier texte d'extension .pl, tel toto.pl, qui commence par une ligne précisant l'interpréteur:

#!/usr/bin/perl -W

et qui est rendu exécutable par la commande chmod +x toto.pl. Dans cet exemple, on a forcé l'option -W qui active tous les avertissements paranoïaques de Perl (voir perlrun(1)).

Liens utiles:

Exercices

I - Concaténation de fichiers

1) Écrivez un script qui simule le programme cat. (Comme point de comparaison, la version GNU de cat, utilisée par exemple sous Linux, est écrite en C fait environ 800 lignes.)

solutions) de plus en plus simples cat1.pl, cat1bis.pl, cat2bis.pl.

2) Que fait le programme Perl ci-dessous? Peut-on encore le raccourcir?

#!/usr/bin/perl
while (<>) { print ; }

solution) le cat le plus court:

#!/usr/bin/perl -e

3) Modifiez votre script pour qu'il accepte les options -n et -E de cat.

solution) cat3.pl.

4) Modifiez votre script pour qu'il ne recopie pas les lignes vides et les lignes commençant par #. Testez le script les fichiers cat1.txt et cat2.txt.

solution) cat4.pl.

II - Mise en forme de textes

On souhaite écrire un script de mise en page qui modifie un texte de manière à le rendre plus présentable. Le format d'entrée comme celui de sortie sera du texte brut, affichable dans un éditeur de texte ou un terminal.

1) Écrivez un script qui modifie l'espacement de manière à ce que:

solution) format1.pl.

2) On suppose que, dans le texte d'entrée, les mots sont séparés par un ou plusieurs espace(s), ponctuation(s) et saut(s) de ligne, et que les paragraphes sont séparés par un ou plusieurs ligne(s) vide(s). Écrivez un script qui découpe chaque paragraphe en lignes de manière à ce que:

en plus de respecter les règles de l'exercice précèdent sur l'espacement.

La largeur du terminal est contenue dans la variable d'environnement COLUMNS. On prendra toutefois quelques caractères de marge. De plus, il faut permettre à l'utilisateur de spécifier cette largeur par un paramètre optionnel.

solution) format2.pl.

Note. Voir le logiciel troff (utilisé en particulier par man) pour avoir une idée d'un formateur de texte évolué. Il y a aussi LaTeX...

III - Pretty-printing de sources C

On souhaite transformer un fichier source .c ou .h en un fichier HTML agréable à consulter.

Voici quelques propositions (les dernières sont les plus difficiles):

Pour vous aider, voici un squelette de fichier HTML:

<html>
<head> <title>truc.c</title> </head>
<body>
      insérez le programme ici
</body>
</html>

solution partielle) pretty.pl.


Antoine Miné