GIMP - CHAPITRE 44


P ART

Perl-Fu


INTRODUCTION A PERL

COURS DE GROBGELD POUR PERL-FU


Gimp chapitre 44

C H A P T E R

Introduction à Perl

Ce chapitre est une brève introduction à Perl pour les utilisateurs qui ne sont pas familiarisés avec lui, ou qui ne sont pas des programmeurs expérimentés. Nous ne pouvons pas vous apprendre comment programmer en Perl, mais nous allons essayer de vous montrer quelques applications et possibilités de Perl.


INTRODUCTION


Perl-Fu ne fait pas partie du Cœur de la distribution Gimp 1.0.x. Par contre Perl-Fu sera comprise en standard dans la prochaine version de Gimp (1.2). Inutile de râler parce que vous utilisez la version Gimp 1.0.x. Perlon est disponible comme greffon pour Gimp 1.0.x, et Perlon est aussi compris dans le développement de la prochaine version de Gimp.

Perlon est un greffon (plug-in) qui permet d’écrire des scripts Gimp en Perl, exactement comme le greffon Script-Fu permet d’écrire des scripts Gimp basés sur Schème.

Oui, Perl-Fu et Script-Fu sont tous deux des greffons (plug-ins).

A notre avis, Perle est considérablement plus direct et simple à utiliser que Schème. De plus, il y a beaucoup plus de scripts Perl disponibles (et de programmeurs expérimentés) que de scripts basés sur Schème. Notez que nous ne parlons pas des scripts spécifiquement Gimp, mais des scripts en général.

Perl est aussi le principal langage utilise pour les scripts CGI. Si vous êtes un peu familiarisés avec les scripts UNIX shell, vous apprendrez très facilement Perl. En fait, vous trouverez probablement moins compliqué d’écrire des scripts Perl que des scripts shell. Tous les awk, sed et autres pincements?? (tweaks) utilisés couramment dans les scripts shell peuvent être réalisés dans Perl sans l’aide d’autres programmes shell UNIX.

Dans “Un cours pour les utilisateurs de Perl Gimp” pages 735 et suivantes, vous trouverez le cours Perl-Fu Dov Grob-gelb’s. Il est très bon, et si vous êtes familiarisés avec Perl, vous serez probablement capables d’utiliser directement Perl-Fu. Cependant ce cours n’a pour objet de former à Perl, ce qui serait un programme trop important et au-delà de l’objectif de ce manuel; il ne vous donnera qu’un cours sommaire sur Perl.


QUEL DOIT ÊTRE VOTRE NIVEAU D’EXPERIENCE?


Pour ceux qui débutent complètement, ce cours sommaire facilitera la lecture et la compréhension du cours de Dov. Après la lecture de ce cours sommaire, vous pourrez décider d’utiliser ou non Perl-Fu. Pour en apprendre plus à ce sujet, le meilleur conseil que nous puissions vous donner est d’acheter un livre sur Perl et d’apprendre les bases de la programmation en Perl. Si vous êtes familiarises avec le script shell, par exemple, vous serez probablement capable (avec un peu d’aide de la documentation en ligne sur Perl) de commencer à utiliser Perl-Fu après la lecture du cours sommaire et du cours de Dov.

Les Perl-Fu man pages traitent de toutes les commandes du greffon Perl-Fu, et se trouvent dans l’appendice “Perl-Fu Man Pages” pages 835 et suivantes. Ces pages sont une excellente source d’information pour l’écriture de scripts Perl-Fu.

Soyons clair: Il vous faudra comprendre Perl pour utiliser Perl-Fu, mais Perl est un langage très étendu, et vous n’aurez pas besoin de tout en apprendre. Il est souvent suffisant d’apprendre les bases de Perl-Fu pour l’écriture de scripts Gimp. Quand vous aurez plus d’expérience, vous pourrez en apprendre plus sur l’écriture des scripts Perl. Dans ce chapitre, nous traitons de l’installation et de la configuration du greffon Perl-Fu. La procédure est en général simple, mais si Perl n’est pas installé dans votre système, elle peut présenter quelques difficultés.


INSTALLATION AND CONFIGURATION DE PERL-FU


Si vous avez lu les chapitres précédents sur l’installation de divers accessoires dans Gimp, (voir “Drawing Tablets And Gimp” pages 657 et suivantes, et “Scanning And Scanners” pages 219 et suivantes), vous vous attendez probablement à trouver au moins 10 pages sur l’installation de Perl-Fu.

Eh bien nous ne ferons pas ainsi cette fois. Si vous avez poursuivi la lecture jusqu’à ce point, vous devez pouvoir effectuer cette installation avec seulement quelques indications. On trouve aussi beaucoup de conseils sur la compilation dans “Compiler les greffons” pages 769 et suivantes.


CONSEILS


Il est toujours bon d’utiliser le code source le plus récent pour le greffon Perl-Fu et pour l’extension Gtk Perl dont Perl-Fu a besoin. Consultez “Perl-Fu” page 881 pour connaître à partir d’où télécharger Perl-Fu et le module Perl Gtk.

Assurez-vous d’abord que vos bibliothèques Gimp et Gtk sont dans votre chemin de recherche de bibliothèques (your library search path). Dans linux ceci est déterminé par le fichier /etc/ld.so.conf. Solaris (et la plupart des autres dialectes Unix) utilisent ma variable d’environnement LD_LIBRARY_PATH pour déterminer le chemin de recherche des bibliothèques (library search path).

Ensuite, vos répertoires binaires de Gimp et Gtk doivent être sur votre chemin (déterminé par la variable d’environnement PATH). Les programmes de configuration (configure) utilisés pour préparer les modules Perl-Fu’s et Gtk’s Perl sont dépendants de l’outil trouver Gimp (finding gimp-tool) et de gtk-config.

Si vous avez plusieurs installations de Gimp et/ou de Gtk, il est très important de régler PATH et LD_LIBRARY_PATH pour que la recherche commence par les bons répertoires.

Supposez que vous ayez Gimp 1.0.x et Gtk 1.0.x installés sous /opt/gimp et

Gimp 1.1.x et GA 1.2.x installés sous /opt/gimp1.1, et que vous vouliez mettre en service Perl-Fu dans Gimp 1.1.x.

Vous devez alors régler le PATH ainsi:


PATH=/opt/gimp1.1/bin:$PATH


Et votre LD_LIBRARY_PATH ainsi:


LD_LIBRARY_PATH=/opt/gimp1.1/

lib:$LD_LIBRARY_PATH.


Cette procédure vous assurera que la compilation et l’installation de Perl-Fu et du module Perl Gtk seront effectués pour une utilisation dans Gimp 1.1.x.

Si vous ne réglez pas correctement votre environnement, il est pratiquement certain que vous n’arriverez pas à compiler et à installer Perl-Fu. Naturellement, il faudra aussi que Perl soit installé dans votre système. Soit Perl 5.004_04, soit Perl 5.005 ou une version plus récente.

Notre dernier conseil est de lire les fichiers README et INSTALL fournis avec Perl-Fu et le module Perl Gtk. Si vous pensez pouvoir vous en dispenser, soit vous souffrez d’un cas sévère de grosse tête (hubris), ou (ce qui est moins probable) vous êtes vraiment un expert d’UNIX, de Gimp et de leur configuration, compilation, installation, etc.


COURS SOMMAIRE

Nous ne pouvons ici traiter de toutes les fonctions de base de Perl, mais nous allons essayer d’en voir l’essentiel, dont vous aurez besoin pour suivre le cours de Dov.

Cette section est destinée aux débutants absolus, et ne vous attendez donc pas à comprendre d’autres scripts Perl après avoir lu ce cours sommaire et le cours de Dov.


DEFINIR UN SCRIPT PERL


Normalement quand on exécute un programme le fichier programme est un fichier binaire formé de uns et de zéros. Pourtant un fichier de programme Perl est différent car Perl est un langage interprété (interpreting language). Perl utilise des fichiers textes ordinaires que les humains peuvent lire et non un fichier binaire composé de 0 et de 1.

Il est donc nécessaire d’indiquer au système d’exploitation qu’il devra utiliser l’interpréteur de Perl (c’est à dire exécuter le fichier avec l’aide de Perl) quand le système d’exploitation lance le fichier. Ceci s’obtient en “chmod:ant” le fichier


chmod 755 perl_fu_script.pl


et avec une instruction spéciale en haut du fichier Perl:


#!/usr/local/bin/perl


Cette instruction spéciale signale au système d’exploitation qu’il devra utiliser Perl pour exécuter le fichier. (Naturellement l’emplacement de Perl est spécifique à l’installation, dans ce cas c’était /usr/bin/perl.)

Vous avez probablement entendu parler de scripts shell. Les scripts Shell utilisent comme Perl des fichiers qu’on peut lire. Une première instruction d’un script shell est:


#!/bin/sh


(or #!/bin/bash la plupart du temps dans un système Linux).

Comme on peut le voir, il existe plusieurs types de langages de scripts, et la première instruction du fichier texte indique quel est l’interpréteur à utiliser. Le reste du fichier contient le code du script.

Le commutateur (switch) -w qui vient après #!/usr/local/bin/perl ordonne à Perl de vous alerter s’il y a des erreurs potentielles dans votre script. Nous recommandons fortement l’utilisation de la balise -w dans les scripts Perl.


MODULES FONCTIONNELS DE PERL


L’installation Cœur?? (core) de Perl contient beaucoup de fonctions que le programmeur peut utiliser, et il est aussi possible d’installer des modules supplémentaires à Perl pour lui ajouter d’autres fonctions si besoin est.

L’ajout permanent de toutes les fonctions Perl rendra ce programme lent (Cette définition n’est pas tout à fait correcte, mais elle suffit ici). Il est préférable de ne charger les fonctions que lorsqu’on en a besoin.

Par exemple, supposons que vous écriviez une application réseau supposée copier un fichier distant (un fichier présent dans un autre ordinateur) vers votre ordinateur. Il vous faudra peut être la fonctionnalité Net:remotecopy (cette commande est complètement fictive) dans Perl. Cette fonctionnalité n’étant pas présente par défaut dans Perl, il faudra en demander le chargement au script. Ce qui est réalisé par la commande use dans Perl:


use Net:remotecopy;


Cette instruction indique à Perl qu’il faut charger la fonctionnalité “remotecopy”. Une fois cette fonctionnalité chargée, on peut utiliser toutes les commandes de copie à distance dans un programme Perl. Il en est de même pour un script Perl-Fu (qui n’est que le nom d’un script Perl utilisant les fonctionnalités Gimp)


use Gimp;

use Gimp::Fu;


Ceci indique à Perl qu’il faut charger la fonctionnalité Gimp et la fonctionnalité Gimp::Fu.

Mais pourquoi faut-il charger deux modules? Eh bien, la module Gimp apporte la fonctionnalité de base de Gimp à Perl. Le module Gimp::Fu (qui dépend du module Gimp) charge beaucoup de fonctions Gimp qui facilitent l’écriture des scripts Perl-Fu.


VARIABLES PERL


Les Variables sont de choses qui peuvent stocker des choses. Par exemple, la variable A peut stocker la valeur 10. Dans Perl une variable est définie ainsi:


$variable = 10;


Notez la terminaison ;” qui indique à Perl qu’il a atteint la fin de la commande

(Ceci est valable pour toutes les commandes Perl). On peut aussi écrire:


$variable

=

10

;

Mais ce n’est pas aussi élégant, n’est-ce pas?


FONCTIONS PERL


Dans Perl, une fonction est une routine qui effectue des choses pour vous. La plupart du temps, les fonctions sont utilisées pour aider le programmeur de différentes façons.

Au lieu d’écrire la même chose dans le code de nombreuses fois, le programmeur peut le faire une seule fois dans une fonction. Il appellera cette fonction quand il en aura besoin. Il en résulte que vous n’aurez pas à entrer toutes les instructions correspondantes, mais aussi que votre code sera plus facile à comprendre.

En fait, quand vous importez un module fonctionnel (comme un module Gimp), vous importez beaucoup de fonctions que vous pourrez utiliser dans votre code, comme la fonction gimp_displays_flush qui empourpre l’affichage de Gimp. Pour empourprer l’affichage de Gimp, entrez:


gimp_displays_flush();


et l’affichage sera empourpré. Ceci est évidemment plus simple que de rentrer le code “flush display” à chaque utilisation (il vous faudrait aussi savoir mettre en œuvre cette fonction; maintenant, il vous suffira de savoir l’utiliser).

Pour créer vos propres fonctions, nommées aussi subroutines, vous devez déclarer la fonction par le nom spécial : sub suivi du nom de la fonction que vous voulez réaliser:


sub karins_flush_display {

gimp_displays_flush();

}

Cette fonction n’a évidemment aucune utilité. Cependant, vous pouvez maintenant utiliser l’appel de fonction karins_flush_display(); au lieu de gimp_displays_flush();

.

Un script Perl-Fu possède une ou plusieurs subroutines que vous utilisez pour manipuler ou créer des images Gimp.


Variables et Fonctions


On peut voir souvent dans les scripts Perl-Fu:


sub some_function {

my($variable1, $variable2) = @_;

#The subroutine code

#Hash marks are comment marks in a Perl script

}

Le mot clé my fait des variables ($variable1 and $variable2) des variables locales à l’intérieur de la subroutine. Ce qui signifie que vous ne pourrez pas y avoir accès ni aux valeurs qu’elles contiennent en dehors de la subroutine.

La variable @_ est une variable spéciale contenant les arguments avec lesquels la subroutine a été appelée (En fait, c’est un peu plus compliqué mais suffisant ici; et nous ne voulons pas trop compliquer les choses à ce niveau). Supposons que vous ayez ce code:


sub some_function {

my($variable1, $variable2) = @_;

print $variable1 + $variable2;

#(print will simply print the sum \

of $variable1 and $variable2)

}

some_function(1,2);

Ensuite, some_function est appelée avec 1 ou 2 comme arguments. Perl lit le fichier entier et enregistre la subroutine. Ensuite, Perl exécute la première commande qui dans ce cas est some_function(1,2);.

La ligne my($variable1, $variable2) = @_; nous permet d’assigner 1 à $variable1, et 2 à $variable2, car elles sont stockées dans la variable spéciale @_ dans cet ordre. La ligne suivante imprime 3, qui est la somme de 1 et 2.


Particularités de Perl-Fu

Une particularité des scripts Perl-Fu est \&function_name qui est utilise dans la partie registry de Perl-Fu (ne vous inquiétez pas, Dov traitera de la partie registry de Perl-Fu).

En tous cas, il existe une façon très spéciale d’inclure les subroutines devant être appelées dans les scripts Perl. Vous devez utiliser cette sorte de référence quand vous appelez votre première et seule subroutine dans la partie registry de Perl-Fu.


BOUCLES

Voulez-vous répéter plusieurs fois la même chose? Vous devrez utiliser la fonctionnalité boucle (loop). Il existe plusieurs façons de le faire dans Perl, mais nous ne présenterons que la boucle for car c’est celle qui est utilisée dans le cours de Dov.

Dov utilise une boucle for comme dans cet exemple:


$number_of_loops = 10;

for ($i=0; $i<$number_of_loops; $i++) {

#(The code)

}

Le $i=0; $i<$number_of_loops; $i++ nous indique que la valeur de départ de la boucle est 0 ($i=0) et que chaque fois qu’une boucle est effectuée nous ajouterons 1 à $i ($i++).

Avant le démarrage de la boucle nous devrons contrôler si $i est inférieur à 10

($i<$number_of_loops). Si c’est le cas, nous continuerons à boucler, sinon nous sortirons de la boucle:


$number_of_loops = 10;

for ($i=0; $i<$number_of_loops; ++$i) {

print $i;

}


Ceci est un exemple de boucle simple qui imprime 0123456789 quand on lance le code. Cette ligne montre que nous avons effectué 10 boucles, en partant de 0 et en arrêtant à 9.


QUELQUES REMARQUES POUR FINIR

Nous n’avons pas appris beaucoup sur Perl —nous avons seulement présenté quelques fonctions de Perl nécessaires à la compréhension du cours de Dov. Si vous êtes intéressés par Perl-Fu, nous vous suggérons d’acheter un livre “Apprendre Perl”.

Un tel livre, avec les exemples de scripts Perl-Fu que vous trouverez dans la distribution de Perl-Fu, et bien entendu les Perl-Fu manpages (que vous trouverez dans l’annexe “Perl-Fu Man Pages” pages 835 et suivantes) sera un très bion moyen d’accès à Perl-Fu. Et aussi, n’oubliez pas de lire l’excellent cours sur Perl-Fu de Dov —considérez cela comme impératif





Retour au sommaire
Chapitre suivant