Initiation au Langage Perl


Suivant Précédent

  • Séance 3

  • Objectif
  • Recherche de GN dans un texte catégorisé

    On utilisera les programmes déjà écrits auxquels on ajoutera les modifications nécessaires pour l'objectif visé.

    Perl : apprentissage 3

    Procédures


    Un sous-programme est une partie de code séparée conçue pour exécuter une tâche particulière. Ils se placent n’importe où dans le programme. Cependant, il est préférable de les regrouper, soit au début, soit à la fin.

    Déclaration

    sub procedure {
           bloc ;
    }

    Appel

    &procedure;

    L’interpréteur de Perl utilise le caractère & pour indiquer qu’un sous-programme est spécifié dans l’instruction. Avec Perl 5, il n’est plus nécessaire d’indiquer ce caractère lors de l’appel du sous-programme si celui-ci a déjà été défini.  Si on place les sous-programmes à la fin du programme, il reste nécessaire d’utiliser le caractère & lors de l’appel.

    On peut aussi établir une référence préalable à un sous-programme défini en fin de programme et ainsi ne pas utiliser le caractère & lors de l’appel :

    sub procedure;
    ...
    procedure ;
    ...
    sub procedure {
           bloc ;
    }


    Avec paramètre(s)

    &proc('parametre');

    Fonctions

    Une fonction est une procédure qui retourne une valeur.

    sub pluriel {
      my (@mots) = @_ ;
      foreach $mot (@mots) {
       $mot := ‘s’ ;
       }
    return(@mots) ;
    }

    l’appel est fait de la manière suivante :

    $mot_au_pluriel = &pluriel('mot');

    La variable $mot_au_pluriel contient la chaîne “ mots ”.

    Le passage de paramètres se fait donc à l'aide du tableau spécial @_ . L'instruction “ my ” réalise une affectation dans des variables locales à la procédure (cf. infra) avec les éléments du tableau. Ce type de passage de paramètre est très efficace car le nombre de paramètres n'est pas forcément fixe.

    Fonctions prédéfinies


    Quelques fonctions offertes par Perl pour manipuler les données.

    Système


    print : permet d'afficher un message, ou le contenu de variables.

    Quelques caractères spéciaux affichables avec “ print ” :


    exit : permet d'arrêter le programme en cours

    if ($erreur) {exit;}

    die : permet d'arrêter le programme en cours en affichant un message d'erreur.

    if ($mot eq 'arret') {die 'Je m’arrete !'} 

    system : permet de lancer une commande système

    system 'mkdir repertoire';

    sleep n : le programme “ dort ” pendant n secondes

    Mathématique


    Les fonctions mathématiques habituelles existent aussi en Perl : sin, cos, tan, int(partie entière d'un nombre), sqrt, rand (nombre aléatoire entre 0 et n), exp (exponentielle de n), log, abs(valeur absolue).

    Chaînes de caractères


    chop(ch) : enlève le dernier caractère de la chaîne

    chomp(ch) : enlève uniquement un “ retour-chariot ”

    length(ch) : retourne la longueur de la chaîne (nombre de caractères)

    uc(ch) : retourne la chaîne en majuscules (Perl 5)

    lc(ch) : retourne la chaîne en minuscules (Perl 5)

    split('motif', ch) : sépare la chaîne en plusieurs éléments (le séparateur étant motif). Le résultat est un tableau.

    substr(ch, indicedébut, longueur) : retourne la chaîne de caractère contenue dans ch, du caractère indicedébut et de longueur longueur.

    index(ch, recherche) : retourne la position de recherche dans la chaîne ch

    Tableaux, listes


    grep(/expression/, tableau) : recherche d'une expression dans un tableau ; grep retourne un tableau des éléments trouvés.

    join(ch, tableau) : regroupe tous les éléments d'un tableau dans une chaîne de caractères (en spécifiant le séparateur)

    pop (tableau) : retourne le dernier élément du tableau (et l'enlève)

    push (tableau, element) : ajoute un élément en fin de tableau (contraire de pop)

    shift(tableau) : retourne le premier élément du tableau (et l'enlève)

    unshift (tableau, element) : ajoute un élément en début de tableau

    sort (tableau) : tri le tableau par ordre croissant

    reverse (tableau) : Inverse le tableau

    splice (tableau, début, nb) : enlève nb éléments du tableau à partir de l'indice début

    Tableaux indicés


    each(tableau_indicé) : les couples clé/valeurs d’un tableau indicé

    values(tableau_indicé) : toutes les valeurs d'un tableau indicé (sous la forme d'un tableau)

    keys(tableau_indicé) : toutes les "clés" d'un tableau indicé

    exists(élément) : indique si un élément a été défini

    delete(élément) : supprimer un élément

    Gestion de fichiers

    Ouverture


    L'ouverture consiste (le plus souvent) à associer un descripteur de fichier (filehandle) à un fichier physique.

    En lecture

    open (FileInput, 'fichier');  

    Ouverture d'un fichier, référencé ensuite par FileInput.

    Un fichier spécial: STDIN, le clavier (entrée standard).

    En écriture

    open (FileOutput, '> fichier'); 

    Ecriture du fichier, si ce fichier existait auparavant : l'ancien contenu est écrasé.

    open (FileOutput,'>>fichier'); 

    Ecriture à la fin du fichier, Le fichier est créé si besoin.

    Deux fichiers spéciaux: STDOUT, STDERR (respectivement: sortie standard, et sortie erreur), par défaut l'écran.

    Gestion des erreurs (||)

    Lorsque l'on ouvre un fichier il se peut qu'il y ait une erreur. Il faut prendre l'habitude, quand on ouvre un fichier, de détecter l'erreur éventuelle. On peut le faire sous la forme suivante : (dérivée du C)

             if (! open (FileInput, ...)) {
                 die "Problème à l'ouverture du fichier";
             }

    Ou sous la forme plus simple et plus usitée en Perl :

             open (FileInput, ...) || die "Pb d'ouverture";

    On peut, et c'est même conseillé, récupérer le texte de l'erreur contenu dans la variable $! :

             open (FileInput, ...) || die "Pb d'ouverture : $!";

    Fermeture


    Commande close :

             close FileInput; 
             close FileOutput;

    Lecture


             $ligne = <FileInput>;


    La fin de ligne (retour-chariot) est lue également. Pour enlever cette fin de ligne il suffit d'utiliser la commande chop, ou son équivalent : chomp (enlève le dernier caractère uniquement si c'est un retour-chariot).

    On peut lire toutes les lignes d'un fichier dans un tableau (en une seule instruction) :

             @lignes = <FileInput>;

    Ecriture


             print FileOutput “ message ”;
    

    Fichier spécial : <>


    Perl offre une fonctionnalité bien pratique : l'utilisation d'un fichier spécial en lecture qui contiendra ce qui est lu en entrée standard. Lorsque, dans une boucle “ while ”, on ne spécifie pas dans quelle variable on lit le fichier : la ligne lue se trouvera dans la variale spéciale “ $_ ”.

    Variables spéciales


    Ce sont les variables sous la forme $c (avec c un caractère non alphabétique) :

    Tableaux spéciaux