\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}