Valid XHTML     Valid CSS2    

Langages de scripts, automatisation de commandes et

production de documents structurés :

3. La relève : Perl et Tcl/Tk

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. TCL : commandes en session interactive

  2. TCL : archivage incrémental de fichiers XML

  3. TK : choix du répertoire de sauvegarde

  4. PERL : commandes en session interactive

  5. PERL : nombre premier en "one-liner"

  6. PERL : archivage incrémental de fichiers XML

  7. PERL : striphtml

  8. PERL : créer les fichiers dictionnaires d'un texte

  9. TK avec Tcl, Rexx et Perl

 

Il est possible d'afficher toutes les solutions via ?solutions=1.

 

1. TCL : commandes en session interactive

Essayer en mode interactif avec tclsh de donner la ou les instructions qui répondent aux mêmes questions que pour Rexx en mode interactif, exercice 4 de la série 2.

Solution :  

 

2. TCL : archivage incrémental de fichiers XML

Implémenter une version tcl de la sauvegarde incrémentale de fichiers XML comme pour l'exercice 7 de la série 2 .

Solution :  

 

3. TK : choix du répertoire de sauvegarde

On veut mettre à disposition des utilisateurs un système de choix de répertoires à sauvegarder. Voici ce qu'on voudrait voir sous Linux :

               non su

Et sous Windows :

               non su

Ecrire un programme TK pour cela. Le programme devra s'exécuter tel quel aussi bien sous Linux que sous Windows.

Solution :  

 

4. PERL : commandes en session interactive

En mode interactif, avec pt.pl donner la ou les instructions qui répondent aux mêmes questions que pour Rexx en mode interactif, exercice 4 de la série 2.

Solution :  

 

5. PERL : nombre premier en "one-liner"

Donner une expression perl en mode one liner qui indique si un nombre est premier ; on utilisera une expression régulière. Est-ce efficace pour des grands nombres ? Que peut-on en conclure sur les expressions régulières ? et sur Perl ?

Solution :  

 

6. PERL : archivage incrémental de fichiers XML

Implémenter une version Perl de la sauvegarde incrémentale de fichiers XML comme pour l'exercice 7 de la série 2 .

Reprendre ensuite le script Perl en ajoutant use strict ; en haut du script. Que faut-il alors changer pour ne pas avoir d'erreurs d'interprétation ?

Solution :  

 

7. PERL : striphtml

Expliquer ce que fait le programme striphtml.pl dont la partie importante est listée ci-dessous avec des numéros de ligne  :


     0022 require 5.002;
     0023
     0024 #########################################################
     0025 # first we'll shoot all the <!-- comments -->
     0026 #########################################################
     0027
     0028 s{ <!                   # comments begin with a `<!'
     0029                         # followed by 0 or more comments;
     0030
     0031     (.*?)               # this is actually to eat up comments in non
     0032                         # random places
     0033
     0034      (                  # not suppose to have any white space here
     0035
     0036                         # just a quick start;
     0037       --                # each comment starts with a `--'
     0038         .*?             # and includes all text up to and including
     0039       --                # the *next* occurrence of `--'
     0040         \s*             # and may have trailing while space
     0041                         #   (albeit not leading white space XXX)
     0042      )+                 # repetire ad libitum  XXX should be * not +
     0043     (.*?)               # trailing non comment text
     0044    >                    # up to a `>'
     0045 }{
     0046     if ($1 || $3) {     # this silliness for embedded comments in tags
     0047    "<!$1 $3>";
     0048     }
     0049 }gesx;                  # mutate into nada, nothing, and niente
     0050
     0051 #########################################################
     0052 # next we'll remove all the <tags>
     0053 #########################################################
     0054
     0055 s{ <                    # opening angle bracket
     0056
     0057     (?:                 # Non-backreffing grouping paren
     0058          [
     0059             |           #    or else
     0060          ".*?"          # a section between double quotes (stingy match)
     0061             |           #    or else
     0062          '.*?'          # a section between single quotes (stingy match)
     0063     ) +                 # repetire ad libitum
     0064                         #  hm.... are null tags <> legal? XXX
     0065    >                    # closing angle bracket
     0066 }{}gsx;                 # mutate into nada, nothing, and niente
     0067
     0068 #########################################################
     0069 # finally we'll translate all &valid; HTML 2.0 entities
     0070 #########################################################
     0071
     0072 s{ (
     0073         &               # an entity starts with a semicolon
     0074         (
     0075        \x23\d+          # and is either a pound (#) and numbers
     0076         |               #   or else
     0077        \w+              # has alphanumunders up to a semi
     0078    )
     0079         ;?              # a semi terminates AS DOES ANYTHING ELSE (XXX)
     0080     )
     0081 } {
     0082
     0083     $entity{$2}         # if it's a known entity use that
     0084         ||              #   but otherwise
     0085         $1              # leave what we'd found; NO WARNINGS (XXX)
     0086
     0087 }gex;                   # execute replacement -- that's code not a string
     

On pourra l'appliquer aux deux fichiers f1.html et f2.html qui sont des portions HTML -- non nécessairement valides -- pour tester ce qui se passe.

Solution :  

 

8. PERL : créer les fichiers dictionnaires d'un texte

Essayer de réaliser l'exercice 3 de la série 2 (création des dictionnaires) en PERL.

Solution :  

 

9. TK avec Tcl, Rexx et Perl

On voudrait disposer d'un convertisseur cm/pouces et pouces/cm sachant qu'un pouce fait 2,54 cm. Réaliser l'implémentation en ligne de commandes avec paramètres en Rexx, Tcl et Perl puis réaliser une implémentation avec interface graphique en Tcl/Tk puis en Rexx/Tk et Perl/Tk.

On commencera par vérifier l'installation de Tk et l'exemple élémentaire fourni en bas de la page tkdocs-install.

Solution :  

 

 

Code-source php de cette page ; code javascript utilisé. Retour à la page principale du cours.

 

 

retour gH    Retour à la page principale de   (gH)