TetaTricks/chap/Perl.tex
2024-09-28 20:25:02 +02:00

135 lines
4.0 KiB
TeX

\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.
Il fut un temps béni, dans le siècle précédent, où il était le maitre
incontesté du Web\index{web} interactif, de par son intégration
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.
Le débutant peut facilement n'utiliser qu'un sous-ensemble du langage,
mais ce serait se priver de quelques \textit{design patterns} assez
efficients.
% ------------------------------------------------------
\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}
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}
% ------------------------------------------------------
\section {Et en vrai ?}
Quels logiciels sont écrits en Perl ?
\texttt{exiftool - Read and write meta information in files} \index{exiftool}
% ------------------------------------------------------
\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}