source: trunk/perl/presentation.tex @ 153

Last change on this file since 153 was 153, checked in by nanardon, 16 years ago
  • structure de controle
  • Property svn:keywords set to Id
File size: 9.3 KB
Line 
1% $Id$
2\documentclass[notes]{beamer}
3\usepackage[frenchb]{babel}
4\usepackage[T1]{fontenc}
5\usepackage{moreverb}
6\usepackage{graphicx}
7
8\mode<presentation>
9{
10  \definecolor{beamerstructure}{RGB}{143,79,112}
11  \definecolor{sidebackground}{RGB}{230,242,250}
12  \color{beamerstructure}
13  \usetheme{Frankfurt}
14  \usepackage{times}
15  \userightsidebarcolortemplate{\color{sidebackground}}
16  \beamertemplateballitem
17}
18
19\title{Perl}
20\subtitle{5}
21\author{Olivier Thauvin}
22\date{\today}
23
24%\AtBeginSection[]
25%{
26%\begin{frame}<beamer>
27%    \frametitle{Plan}
28%    \tableofcontents[currentsection]
29%\end{frame}
30%}
31
32\begin{document}
33
34\frame{\titlepage}
35
36\section*{Sommaire}
37
38\begin{frame}{Plan}
39\tableofcontents
40\end{frame}
41
42\section{Presentation}
43
44\begin{frame}
45\frametitle{PERL}
46Perl, écrit par Larry Wall en 1987.
47\vfill
48\emph{Practical Extraction and Report Language}
49(\emph{langage pratique d'extraction et de génération de rapports})
50\vfill
51\emph{Pathetically Eclectic Rubbish Lister}
52(\emph{collectionneur de déchets pathétiquement éclectiques})
53\vfill
54
55Je parle de Perl \textbf{5} !
56
57Dernière version 5.10.0 (Rafael Garcia-Suarez)
58\vfill
59
60Perl est disponible sur UNIX, Windows (et cygwin), OS2, VMS, \ldots
61\end{frame}
62
63\begin{frame}
64\frametitle{Pourquoi PERL ?}
65\begin{itemize}
66\item langage scripté, non compilé
67\pause
68\item portable
69\pause
70\item permet une écriture rapide
71\pause
72\item possède un ramasse miettes (garbage collector)
73\pause
74\item est orienté objet
75\pause
76\item possède un grand nombre de modules additionnels
77\end{itemize}
78\pause
79\vfill
80\vfill
81Utilisation:
82\begin{itemize}
83\item petits scripts type shell
84\pause
85\item des programmes complexes
86\pause
87\item des services de toutes sortes
88\pause
89\item des sites web
90\end{itemize}
91\end{frame}
92
93\begin{frame}[fragile]
94\frametitle{Exemples}
95Exemple de script:
96\vfill
97\begin{verbatim}
98#!env perl
99
100print "Hello World\n";
101\end{verbatim}
102\vfill
103\vfill
104Sinon on peut aussi faire ça:
105\vfill
106\verb+perl -e 'print "Hello World\n"'+
107\end{frame}
108\begin{frame}[fragile]
109\frametitle{bestever.pl}
110Sinon ça peut aussi ressembler à ça:
111\vfill
112\begin{tiny}
113\begin{verbatim}
114/;{}def/#{def}def/$_={/Times-Bold exch selectfont}#/_{rmoveto}#/"{dup}#/*/!/$
115;/q{exch}#/x ; {/J q #}#/.{/T q #}#{stringwidth}#{}#{}# 14 string dup dup dup
116260 40 moveto 90 rotate ; %/}};$0='"\e[7m \e[0m"';@ARGV=split//,reverse
117q(ThePerl). q(Journal) x 220 ; q ; 0 T putinterval exch 7 J putinterval ;
118 ; $_= q /m$ pop T($*!$"=!$ " )pop " * true% ? $ " $!" "  !!  !! % !" !"    !
119! charpath {!"""}pop $ pop{""!}pop ! neg{!#}pop 220 ! neg _{!!}pop J false %T
120charpath  clip " pop 0 " moveto 6{!!}pop $_= 105{!!}pop {$ ! $ " !  #! ##}
121pop{dup dup $ ! " pop pop q{"}pop 22{dup show}repeat {"}pop q 22 mul{$ "} pop
122neg{!#! $ "}pop ! 8 .65 mul{$ # # $}pop ! neg{"}pop  _ pop{"}pop } repeat pop
123" {  $ " ! ! ! $ " ! !" "#"  #"!"""""! #" " # "m/;@ARGV=(@ARGV[-14..-1])x50;q}
124 0 "%};s/m[ou]|[-\dA-ln-z.\n_{}]|\$_=//gx;s/(.)(?{$*=''})/('$*.='.(++$#
125%2?'':"$0;").'pop;')x(ord($1)-31).'$*'/gee;s/((.(\e\[.m)*|.){77})/$1\n/g;print
126; sub showpage {}
127\end{verbatim}
128\end{tiny}
129\vfill
130De Philippe Bruhat (Book).
131\end{frame}
132
133\section{Variables}
134
135\subsection{Variables de Perl}
136
137\begin{frame}
138\frametitle{types de variables}
139\textbf{15} types de variables:
140\vfill
141\pause
142\includegraphics[height=40mm]{Angel_fish}
143\pause
144\includegraphics[height=40mm]{tableau}
145\pause
146\includegraphics[height=40mm]{hache}
147\pause
148\vfill
149Et les autres on s'en moque...
150\end{frame}
151
152\subsection{Scalaire}
153
154\begin{frame}[fragile]
155\frametitle{scalaire}
156Un \textbf{scalaire} est une simple valeur:
157\pause
158\vfill
159\begin{itemize}
160\item \emph{undef}
161\pause
162\item définie:
163    \begin{itemize}
164    \item un chiffre, nombre
165    \item une chaine de caractères
166    \item une suite d'octets binaires
167    \item \ldots
168    \end{itemize}
169\end{itemize}
170\pause
171\vfill
172\begin{verbatim}
173$rien = undef;
174$chiffre = 42;
175$chaine = "1";
176print $chaine + $chiffre;
177print $chaine . $chiffre;
178\end{verbatim}
179\pause
180\vfill
181Valeur \textit{fausses}: \textit{undef}, 0, ""
182
183Valeur \textit{vraies}: le reste: 1, "0", "un chien ?"
184\end{frame}
185
186\subsection{Les tableaux}
187
188\begin{frame}[fragile]
189\frametitle{tableau (array)}
190Les tableaux sont des piles de \textit{scalaires}.
191\pause
192
193Ils sont dynamiques, et a une seule dimension (mais ce n'est pas un problème en fait).
194\pause
195\vfill
196Déclarer le tableau:
197
198\verb+@tableau = ("un", 2);+
199\vfill
200Accéder aux/Déclarer les valeurs d'un tableau (attention au \$):
201
202\begin{verbatim}
203$tableau[3] = 4;
204$tableau[-1]; # dernier élément
205\end{verbatim}
206
207\pause
208\vfill
209Mais en fait:\hfill
210\begin{tabular}{rcl}
211shift <=&\verb+0@@@@@n+&<= push\\
212unshift =>&\verb+0@@@@@n+&=> pop\\
213\end{tabular}
214\pause
215\vfill
216Nombre d'éléments: \verb+scalar(@tableau)+
217
218Dernier indice: \verb+$#tableau+
219\end{frame}
220
221\begin{frame}[fragile]
222\frametitle{hash}
223Ce sont des tableaux indexés \verb+clef => valeur+.
224
225Ils sont dynamiques.
226
227\pause
228\begin{itemize}
229\item la clef est une valeur textuelle simple
230\item la valeur est un \textbf{scalaire}
231\item l'ordre des clefs n'est pas conservé !!!
232\end{itemize}
233
234\pause
235Déclarer un tableau de hashage:
236\begin{verbatim}
237%hash = (
238    foo => "un"
239    bar => 2
240);
241\end{verbatim}
242
243\pause
244Accéder aux/Déclarer les valeurs d'un hash (attention au \$):
245\begin{verbatim}
246$hash{baz} = 'trois';
247$clef = 'clef';
248$hash{$clef};
249\end{verbatim}
250
251\end{frame}
252
253\begin{frame}[fragile]
254\frametitle{Comprendre les listes}
255\textbf{Perl aplati les listes !}
256
257Le concept est simple, mais redoutable:
258\pause
259
260Prenons deux tableaux de trois entrées:
261\begin{verbatim}
262@tab1 = (1, 2, 3);
263@tab2 = (4, 5, 6);
264\end{verbatim}
265\pause
266
267Récupérer la première entrée, et le reste de \verb+@tab1+
268\begin{verbatim}
269($un, @reste) = @tab1;
270\end{verbatim}
271\pause
272Récupérer la première entrée, et le reste de \verb+@tab1+ et \verb+@tab2+
273\begin{verbatim}
274($un, @reste) = (@tab1, @tab2);
275\end{verbatim}
276\pause
277Récupérer la deuxième entrée, et le reste de \verb+@tab1+ et \verb+@tab2+
278\begin{verbatim}
279(undef, $deux, @reste) = (@tab1, @tab2);
280\end{verbatim}
281\end{frame}
282
283\begin{frame}[fragile]
284\frametitle{Comprendre les listes: les hash}
285Mais le pire, c'est que ce concept s'applique aussi \textbf{hash}
286\pause
287
288'\verb+=>+' est un séparateur comme la '\verb+,+', donc c'est une liste:
289\begin{verbatim}
290%hash = (un => 1, deux => 2);
291%hash = (un, 1, deux, 2);
292\end{verbatim}
293\pause
294Si un hash revois une liste et prends une liste\ldots
295\begin{verbatim}
296@tab = %hash;
297\end{verbatim}
298\verb+@tab+ contient "un", 1\ldots
299
300\begin{verbatim}
301@tab = (1, 2, 3, 4);
302%hash = @tab;
303%unhash = (%hash2, %hash3);
304\end{verbatim}
305\verb+%hash+ contient 1 \verb+=>+ 2, 3 \verb+=>+ 4\ldots
306
307Les clef dupliquées sont ecrasées, la dernière gagne !
308
309\end{frame}
310
311\section{Syntaxe}
312
313\subsection{Syntaxe générale}
314
315\begin{frame}[fragile]
316\frametitle{Grandes lignes}
317\begin{itemize}
318\item les espaces sépare les mots
319\pause
320\item le '\verb+;+' sépare les instructions
321\pause
322\item le '\verb+,+' sépare les valeurs
323\pause
324\item \verb+( )+ limite une liste
325\pause
326\item \verb+{ }+ limite un bloc
327\pause
328\item tout ce qui suit un \verb+#+ est un commentaire
329\pause
330\item \verb+__END__+ mets fin au script
331\end{itemize}
332\pause
333
334Tout est permis, y compris apporter de la lisibilité à votre code:
335\begin{verbatim}
336      push # création du tableau
337(         @tableau
338  , $valeur,
339    $valeur2                   );
340\end{verbatim}
341Sauf si vous tenez à faire dans l'obfu !
342\end{frame}
343
344\begin{frame}[fragile]
345\frametitle{Structure classique d'un script}
346\onslide<1-6>{un shell bang:}
347\onslide<2->
348\begin{verbatim}
349#!env perl
350\end{verbatim}
351\onslide<3-6>{charger les modules dont on a besoin:}
352\onslide<4->
353\begin{verbatim}
354use strict;
355use warnings;
356\end{verbatim}
357\onslide<5-6>{arrive le code:}
358\onslide<6->
359\begin{verbatim}
360while (<STDIN>) {
361    s/ //g;
362    print $_;
363}
364\end{verbatim}
365\onslide<7->
366\begin{verbatim}
367__END__
368\end{verbatim}
369\end{frame}
370
371\subsection{Controles d'execution}
372
373\begin{frame}[fragile]
374\frametitle{if}
375\onslide<1->
376Bah... if quoi...
377\vfill
378\begin{verbatim}
379if ($var == 0) {
380    print "var vaut 0\n";
381}
382\end{verbatim}
383\onslide<3->
384\begin{verbatim}
385 elsif ($var == 1) {
386    print "var vaut 1\n";
387}
388\end{verbatim}
389\onslide<2->
390\begin{verbatim}
391 else {
392    print "var vaut $var\n";
393}
394\end{verbatim}
395\onslide<4->
396Forme suffixée:
397\begin{verbatim}
398print "var vaut 0\n" if ($var == 0);
399\end{verbatim}
400\end{frame}
401
402\begin{frame}[fragile]
403\frametitle{while}
404Boucle tant qu'une condition est vraie:
405
406\begin{verbatim}
407while ($i < 100) {
408    print "$i\n";
409    $i++;
410}
411\end{verbatim}
412\vfill
413\pause
414Forme suffixée:
415
416\begin{verbatim}
417$i++ while($i < 100);
418\end{verbatim}
419\end{frame}
420
421\begin{frame}[fragile]
422\frametitle{foreach}
423Boucle \textbf{pour chaque} élément d'une liste:
424
425\begin{verbatim}
426foreach $elem (@tableau) {
427    print "$elem\n";
428}
429\end{verbatim}
430
431Très pratique, cela évite de s'embeter avec les indices du tableau.
432\vfill
433\pause
434
435Forme suffixée:
436
437\begin{verbatim}
438print "$_\n" foreach(@tableau);
439\end{verbatim}
440\end{frame}
441
442\begin{frame}[fragile]
443\frametitle{Sortez moi de là}
444\textbf{next} fait passer à la prochaine itération d'une boucle:
445
446\begin{verbatim}
447foreach $val (@tableau) {
448    next if(!$val);
449    print "$val\n";
450}
451\end{verbatim}
452\pause
453\vfill
454\textbf{last} quitte une boucle:
455
456\begin{verbatim}
457foreach $val (@tableau) {
458    if ($val > 1000) {
459        print "$val est trop haut, arret\n";
460        last;
461    }
462    print "$val\n";
463}
464\end{verbatim}
465\end{frame}
466
467\section*{Fin}
468
469\begin{frame}{Questions ?}
470\center{
471\hfill
472}
473\end{frame}
474
475\end{document}
Note: See TracBrowser for help on using the repository browser.