Créer une fonction Perl
Préparation
Téléchargez le projet projet-perl.zip. Ce projet contient:
- image.c et image.h, pour lire et écrire des images
- traitement.c, avec un algorithme de traitement exemple
- projet.pl, un script Perl qui appelle le code C
- 1570970041.jpg, une image exemple
Le projet a été préparé pour Linux, mais il peut être adapté pour Windows et Mac OS en ajoutant les bibliothèques libpng et libjpeg.
Insérer l'algorithme de traitement
Insérez votre algorithme dans la fonction traiterImage
de traitement.c. Vu que le projet n'est plus lancé comme programme, il n'y a plus de fonction main
.
L'algorithme exemple retourne deux valeurs (cielBleu
et nuit
). Pour adapter cela, il faut
- modifier la structure dans traitement.h,
- adapter les dernières lignes de la fonction
projet
dans projet.pl.
Alternativement, vous pouvez effacer les fichiers traitement.c et traitement.h, et insérer votre algorithme directement dans la partie C de projet.pl.
Lancer projet.pl
projet.pl contient du code Perl en haut, et le code C en bas. Grace au module Inline::C, chaque fonction C devient accessible depuis le code Perl.
Vous pouvez lancer ce script depuis le terminal:
$$ ./projet.pl
Lors du premier démarrage du script, le code C est compilé, et stocké dans un sous-répertoire _Inline
.
Behind the scenes
Inline::C compile le code C en bas du fichier, et génère l'interface Perl ↔ C nécessaire. Pour cela, il cherche les fonctions comme traiterImage
, et génère le code qui transforme les paramètres Perl en paramètres C, et la valeur de retour C en valeur Perl.
Ceci ne marche que pour les types simples (int
, double
, char *
, ...). Pour les structures, on doit faire cette transformation manuellement et passer une valeur Perl (SV *
, AV *
, ou HV *
). Le dernier bout de code de la fonction projet
crée un Perl hash avec le résultat du traitement.