2020-11-28 00:43:55 +11:00
|
|
|
\chapter{Perl} \label{chap:Perl} \index{Perl}
|
|
|
|
|
|
|
|
|
|
|
|
Également connu sous le nom de
|
|
|
|
\textsl{Pathologically Eclectic Rubbish Lister}%
|
|
|
|
\footnote{collectionneur pathologique de déchets variés},
|
|
|
|
Perl est un langage qui a été crée en 1987 par Larry Wall comme un
|
|
|
|
substitut moderne au classique combo shell/sed/awk.
|
|
|
|
\index{shell} \index{sed} \index{awk}
|
|
|
|
Il est de ce fait très orienté vers la manipulation de
|
|
|
|
données textuelles et contient d'énormes facilités d'utilisation
|
|
|
|
des expressions régulières.
|
|
|
|
|
2024-09-29 05:25:02 +11:00
|
|
|
Il fut un temps béni, dans le siècle précédent, où il était le maitre
|
2020-11-28 00:43:55 +11:00
|
|
|
incontesté du Web\index{web} interactif, de par son intégration
|
2024-09-29 05:25:02 +11:00
|
|
|
dans le serveur Apache\index{Apache}
|
|
|
|
(les fameux scripts \textsc{cgi}\index{cgi}),
|
|
|
|
et de modules d'écriture de clients http\index{http}
|
|
|
|
(page \pageref{perlhttp}).
|
|
|
|
Mais ce temps est-il révolu ? Nous le verrons dans un
|
|
|
|
prochain épisode.
|
2020-11-28 00:43:55 +11:00
|
|
|
|
|
|
|
Le débutant peut facilement n'utiliser qu'un sous-ensemble du langage,
|
2024-09-29 05:25:02 +11:00
|
|
|
mais ce serait se priver de quelques \textit{design patterns} assez
|
2020-11-28 00:43:55 +11:00
|
|
|
efficients.
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
% ------------------------------------------------------
|
2020-11-28 00:43:55 +11:00
|
|
|
|
2024-09-29 05:25:02 +11:00
|
|
|
\section{Perl, le départ}
|
|
|
|
|
|
|
|
La méthode shebang. Tout le monde connait maintenant le shebang,
|
|
|
|
ce n'est pas la peine de radoter dessus.
|
|
|
|
On va donc commencer par le premier exemple, puis enchainer
|
|
|
|
sur les petits trucs à savoir, en mode « recette à la rache ».
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
#!/usr/bin/perl
|
|
|
|
print "hello world"
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
La méthode purecli.
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
tth@redlady:~ $ echo "print \"hello world\n\";" | perl
|
|
|
|
hello world
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
% ------------------------------------------------------
|
|
|
|
|
|
|
|
\section{Modèle d'exécution}
|
|
|
|
|
|
|
|
|
|
|
|
% ------------------------------------------------------
|
|
|
|
\section{Les variables}
|
|
|
|
|
|
|
|
Auto-vivification.
|
|
|
|
|
|
|
|
% ------------------------------------------------------
|
|
|
|
|
|
|
|
\section{Gestion des modules} \index{CPAN}
|
|
|
|
|
|
|
|
Tout comme pour le Fortan Moderne, c'est une notion essentielle.
|
|
|
|
Un exemple très simple, le module Dummy\index{dummy}.
|
|
|
|
|
|
|
|
% ------------------------------------------------------
|
|
|
|
|
|
|
|
\label{perlhttp}
|
|
|
|
\section{Le \texttt{http}} \index{http} \index{protocole}
|
|
|
|
|
|
|
|
HTTP (Hyper Text Transfert Protocole) est le protocole qui
|
|
|
|
est à la base du bien connu
|
|
|
|
\textsl{World Wide Web}
|
|
|
|
la chose que les gens appelent faussement l'internet.
|
|
|
|
\index{www}\index{gafam}
|
|
|
|
L'écosystème Perl est bien équipé pour
|
|
|
|
agir dans ce monde là.
|
|
|
|
|
|
|
|
|
|
|
|
% Scrapping de la patate en vue !
|
|
|
|
% https://al.smeuh.org/cgi-bin/express.pritz
|
|
|
|
|
|
|
|
% ------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
\section{Traiter du texte}
|
2020-11-28 00:43:55 +11:00
|
|
|
|
|
|
|
Un cas concret~: générer du code en langage \texttt{C} à partir
|
|
|
|
d'un fichier traité ligne par ligne. Chacune de ces lignes est
|
|
|
|
de la forme \texttt{ID un texte quelconque.} avec ID qui est
|
|
|
|
une courte chaine alphabétique. Le résultat de la conversion
|
|
|
|
sera \texttt{char *p\_ID "un texte quelconque.";} et pourra
|
|
|
|
être utilisé par un \texttt{\#include "fichier.h"} bien
|
|
|
|
classique.
|
|
|
|
|
|
|
|
\subsection{Le traitement}
|
|
|
|
|
|
|
|
Ce traitement peut être décomposé en deux actions emboitées~:
|
|
|
|
d'une part traiter une ligne,
|
|
|
|
et d'autre part, traiter un fichier plein de lignes.
|
|
|
|
|
|
|
|
La première va être encapsulée dans un module Perl.
|
|
|
|
|
|
|
|
\lstinputlisting[language=perl]{code/id2h.pm}
|
|
|
|
|
|
|
|
\subsection{L'interface}
|
|
|
|
|
|
|
|
Quand à l'interface utilisateur, quelques arguments sur
|
|
|
|
la ligne de commande feront l'affaire.
|
|
|
|
|
|
|
|
\lstinputlisting[language=perl]{code/id2h.pl}
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
% ------------------------------------------------------
|
|
|
|
|
2023-01-01 01:39:58 +11:00
|
|
|
\section {Et en vrai ?}
|
|
|
|
|
2024-09-29 05:25:02 +11:00
|
|
|
Quels logiciels sont écrits en Perl ?
|
|
|
|
|
2023-01-01 01:39:58 +11:00
|
|
|
\texttt{exiftool - Read and write meta information in files} \index{exiftool}
|
|
|
|
|
2021-10-23 23:25:18 +11:00
|
|
|
% ------------------------------------------------------
|
2020-11-28 00:43:55 +11:00
|
|
|
|
|
|
|
\section{RFC 8589}
|
|
|
|
|
|
|
|
RFC 8589 is an “informational” RFC that serves as a guide for
|
|
|
|
developers of applications, such as email clients, Web browsers
|
|
|
|
and more, to implement the “leaptofrogans” URI scheme
|
|
|
|
(see also the official URI schemes registered with the IANA).
|
|
|
|
Nobody is under any obligation, but RFC 8589 establishes a clear
|
|
|
|
path for enabling direct links to Frogans sites in online content.
|
|
|
|
|
|
|
|
|
|
|
|
\section{oneliners}
|
|
|
|
|
|
|
|
|