source: trunk/tp-perl/main.tex @ 271

Last change on this file since 271 was 271, checked in by nanardon, 13 years ago
  • fixes, improvement and last slide
File size: 10.9 KB
Line 
1% $Id: main.tex 256 2010-07-07 06:24:33Z nanardon $
2\documentclass[notes]{beamer}
3\usepackage[utf8]{inputenc}
4\usepackage[frenchb]{babel}
5\usepackage[T1]{fontenc}
6\usepackage{moreverb}
7\usepackage{graphicx}
8\usepackage{eurosym}
9
10\mode<presentation>
11{
12  \definecolor{beamerstructure}{RGB}{143,79,112}
13  \definecolor{sidebackground}{RGB}{230,242,250}
14  \color{beamerstructure}
15  \usetheme{Antibes}
16  \usepackage{times}
17  \userightsidebarcolortemplate{\color{sidebackground}}
18  \beamertemplateballitem
19}
20
21\title{TP Perl (5)}
22\subtitle{}
23\author{Olivier Thauvin}
24\date{\today}
25
26%%\setcounter{tocdepth}{2}
27\AtBeginSection[]
28{
29\begin{frame}
30    \frametitle{Plan - \secname}
31    \tableofcontents[currentsection,hideallsubsections]
32\end{frame}
33}
34
35\AtBeginSubsection[]
36{
37\begin{frame}
38    \frametitle{Plan - \secname}
39    \tableofcontents[currentsection,sectionstyle=show/hide,hideothersubsections,subsectionstyle=show/shaded/hide]
40\end{frame}
41}
42
43\begin{document}
44
45\frame{\titlepage}
46
47\begin{frame}{Plan}
48\tableofcontents[hideallsubsections]
49\end{frame}
50
51\section{Introduction}
52
53\begin{frame}
54\frametitle{Perl}
55\begin{alertblock}{TMTOWTDI}
56There's more than one way to do it
57\end{alertblock}
58\pause
59
60\begin{exampleblock}{Documentations principales}
61\begin{itemize}
62\item perl: la liste des documentations
63\item perlfunc: fonctions de bases
64\item perlop: les opérateurs
65\item perlvar: les variables \og{}magiques \fg{}
66\end{itemize}
67\end{exampleblock}
68\end{frame}
69
70\section{Premiers pas}
71
72\begin{frame}[fragile]
73\frametitle{Perl}
74\begin{block}{Le programme perl}
75\begin{verbatim}
76$ perl -v
77
78This is perl 5, version 12,
79subversion 2 (v5.12.2) built for
80x86_64-linux-thread-multi
81\end{verbatim}
82\ldots
83\end{block}
84\end{frame}
85
86\begin{frame}[fragile]
87\frametitle{Premier Script perl}
88\begin{exampleblock}{Hello World!}
89\verbatiminput{hello-world.pl}
90\end{exampleblock}
91\end{frame}
92
93\begin{frame}[fragile]
94\frametitle{Test rapide}
95\begin{exampleblock}{Avec le deboguer}
96\begin{verbatim}
97$ perl -de 0
98
99Loading DB routines from perl5db.pl version 1.33
100Editor support available.
101
102Enter h or `h h' for help, or `man perldebug'
103for more help.
104
105main::(-e:1):   0
106  DB<1> print "coucou"
107coucou
108  DB<2>
109\end{verbatim}
110\end{exampleblock}
111\end{frame}
112
113\subsection{les variables}
114
115\begin{frame}[fragile]
116\frametitle{Variables}
117\begin{exampleblock}{Variables!}
118\scriptsize{\verbatiminput{variable.pl}}
119\end{exampleblock}
120\end{frame}
121
122\begin{frame}[fragile]
123\frametitle{Les variables magiques}
124\begin{block}{variables importantes}
125\begin{tabular}{|c|l|}
126\hline
127\verb+$_+&valeur courante\\
128\verb+@_+&la \og{}pile \fg{}\\
129\verb+@ARGV+&les arguments passé au script\\
130\hline
131\verb+$a+ et \verb+$b+&variables de \verb+sort+\\
132\hline
133\verb+$!+&derniÚre erreur systÚme\\
134\verb+$@+&erreur récupérée par \verb+eval()+\\
135\hline
136\end{tabular}
137\end{block}
138\end{frame}
139
140\subsection{Renvois d'erreurs}
141
142\begin{frame}[fragile]
143\frametitle{die() et warn()}
144\begin{block}{Fonctions:}
145\begin{itemize}
146\item \verb+warn()+: affiche un message d'erreur
147\item \verb+die()+: met de plus fin au script
148\end{itemize}
149\end{block}
150\begin{block}{Fin de ligne}
151Sans retour chariot, la ligne est affichée:
152\begin{scriptsize}
153\begin{verbatim}
154  DB<16> die "je meurs"                                                                                                                                     
155je meurs at (eval 40)[/usr/lib/perl5/5.12.2/
156   perl5db.pl:638] line 2.
157\end{verbatim}
158\end{scriptsize}
159\end{block}
160\end{frame}
161
162\subsection{Les boucles}
163
164\begin{frame}[fragile]
165\frametitle{Traitement sur des listes}
166\begin{block}{foreach}
167\verb+foreach my $v (@tab) { }+
168\end{block}
169\begin{block}{for}
170\verb-for(my $i = 0; $i < 10; $i++) { }-
171\end{block}
172\begin{block}{while}
173\verb+while ($i > 0) { $i-- }+
174\end{block}
175\end{frame}
176
177\begin{frame}[fragile]
178\frametitle{Exercice 1}
179\begin{block}{Enoncé}
180Afficher les minuscules et majuscules des 3 1Úre lettre de l'alphabet
181\end{block}
182\begin{block}{Fonction utiles}
183\begin{itemize}
184\item \verb+uc()+, \verb+lc()+
185\item \verb+print+,
186\end{itemize}
187\end{block}
188\end{frame}
189
190\begin{frame}[fragile]
191\frametitle{Exercice 1: Corrigé}
192\begin{exampleblock}{Exercice 1}
193\scriptsize{\verbatiminput{exercice01.pl}}
194\end{exampleblock}
195
196\begin{exampleblock}{Avec un one-liner}
197\scriptsize{
198\begin{verbatim}
199$ perl -e
200    'print $_ . " " . uc($_) . "\n" foreach(qw(a b c))'
201a A
202b B
203c C
204\end{verbatim}
205}
206\end{exampleblock}
207\end{frame}
208
209\subsection{Les tableaux}
210
211\begin{frame}[fragile]
212\frametitle{Base sur les tableaux}
213\begin{block}{le tableau}
214\begin{itemize}
215\item \verb+my @tableau = ();+ affectations
216\item \verb+$#tableau+ renvoi l'indice du dernier élément
217\item \verb+@tableau+ renvoi le nombre d'éléments
218\end{itemize}
219\end{block}
220\pause
221
222\begin{block}{Fonction sur les tableaux}
223\begin{itemize}
224\item \verb+ map { $_        } @tableau+ traite
225\item \verb+grep { $_        } @tableau+ filtre
226\item \verb+sort { $a <=> $b } @tableau+ tri
227\end{itemize}
228\end{block}
229\end{frame}
230
231\begin{frame}[fragile]
232\frametitle{Exercice 2:}
233\begin{block}{enoncé}
234Afficher les mots de cet ennoncé par ordre décroissant.
235\end{block}
236
237\begin{exampleblock}{Mot clef}
238\begin{itemize}
239\item opérateurs: \verb+cmp+, \verb+<=>+, \verb+qw+
240\end{itemize}
241\end{exampleblock}
242\end{frame}
243
244\begin{frame}[fragile]
245\frametitle{Exercice 2: Corrigé}
246\begin{exampleblock}{Exercice 2}
247\scriptsize{\verbatiminput{exercice02.pl}}
248\end{exampleblock}
249\end{frame}
250
251\subsection{Les HASH}
252
253\begin{frame}[fragile]
254\frametitle{Fonctions clefs des HASH}
255\begin{block}{Fonctions}
256\begin{itemize}
257\item \verb+keys+, revois les clefs
258\item \verb+values+, renvois les valeurs
259\item \verb+exists+ renvois vrai si une clef existe
260\item \verb+each+ renvois les couples clef/valeur
261\end{itemize}
262\end{block}
263\end{frame}
264
265\section{Expression réguliÚre}
266
267\begin{frame}[fragile]
268\frametitle{RegExp}
269\begin{block}{}
270Recherche (et remplacement) de motifs.
271\end{block}
272
273\begin{block}{CaractÚres speciaux}
274\begin{tabular}{|c|l|}
275\hline
276\verb+.+&n'importe quel caractÚre\\
277\hline
278\verb+?+&répété une fois\\
279\verb+*+&répété 0-n fois\\
280\verb-+-&répété 1-n fois\\
281\hline
282\verb-^-&debut de ligne\\
283\verb-$-&fin de ligne\\
284\hline
285\end{tabular}
286\end{block}
287\end{frame}
288
289\begin{frame}[fragile]
290\frametitle{Opérateur}
291\begin{block}{Pas de fonctions, des opérateurs:}
292\begin{itemize}
293\item \verb+=~+
294\item \verb+!~+ (négation)
295\end{itemize}
296\end{block}
297\pause
298
299\begin{exampleblock}{exemple de regexp}
300\begin{verbatim}
301($match) = $text =~ m/(t.t.)/;
302\end{verbatim}
303\end{exampleblock} 
304\end{frame}
305
306\begin{frame}[fragile]
307\frametitle{RegExp Perl:}
308\begin{alertblock}{RegExp de perl !}
309Certaines fonctionnalités ne sont disponibles que dans PERL
310\end{alertblock}
311\pause
312\begin{exampleblock}{Documentation}
313\begin{itemize}
314\item \verb+perlre+
315\item \verb+perlretut+
316\end{itemize}
317\end{exampleblock}
318\end{frame}
319
320\begin{frame}
321\frametitle{RegExp: Exercice}
322\begin{block}{Phrase:}
323L'attaque sur Pearl Harbor fut
324lancée par surprise le matin du dimanche 7 décembre 1941.
325\end{block}
326
327\begin{block}{Questions}
328\begin{itemize}
329\item trouver le premier \og{}mot \fg{}
330\item trouver le premier chiffre
331\item remplacer \og{}Pearl \fg{} par \og{}Perl \fg{}
332\item remplacer les espaces par des \og{}\_ \fg{}
333\end{itemize}
334\end{block}
335\end{frame}
336
337\begin{frame}[fragile]
338\begin{block}{Trouver le premier \og{}mot \fg{}}
339\begin{verbatim}
340$text =~ /([\w']+)/";
341print $1;
342\end{verbatim}
343\end{block}
344\pause
345
346\begin{block}{trouver le premier chiffre}
347\begin{verbatim}
348$text =~ /(\d)/";
349print $1;
350\end{verbatim}
351\end{block}
352\end{frame}
353
354\begin{frame}[fragile]
355\begin{block}{remplacer \og{}Pearl \fg{} par \og{}Perl \fg{}}
356\begin{verbatim}
357$text =~ s/Pearl/Perl/;
358print $text;
359\end{verbatim}
360\end{block}
361\pause
362
363\begin{block}{remplacer les espaces par des \og{}\_ \fg{}}
364\begin{verbatim}
365$text =~ s/\s/_/g;
366print $text;
367
368L\'attaque_sur_Pearl_Harbor_fut_lancee_par
369_surprise_le_matin_du_dimanche_7_décembre
370_1941.
371\end{verbatim}
372\end{block}
373\end{frame}
374
375\section{AccÚs aux fichiers}
376
377\begin{frame}[fragile]
378\frametitle{begin()/close()}
379\begin{block}{open}
380\verb+$ret = open($handle, '>', 'fichier');+
381\end{block}
382\pause
383\begin{alertblock}{3 arguments}
384Sur un fichier standard, toujours utiliser open avec 3 arguments.
385\end{alertblock}
386\pause
387\begin{block}{close}
388\verb+close($handle);+
389\end{block}
390\end{frame}
391
392
393\begin{frame}[fragile]
394\frametitle{Lecture}
395\begin{block}{binaires:}
396\verb+$lus = read($handle, $data, 1024);+
397\end{block}
398
399\begin{block}{textes}
400\begin{verbatim}
401$ligne = <$handle>;
402chomp($ligne);
403\end{verbatim}
404\end{block}
405\end{frame}
406
407\begin{frame}
408\frametitle{Lire un fichier}
409\begin{exampleblock}{}
410\scriptsize{\verbatiminput{fichier.pl}}
411\end{exampleblock}
412\end{frame}
413
414\section{Utilisation d'un module}
415
416\subsection{Howto}
417
418\begin{frame}
419\frametitle{CPAN}
420\begin{block}{CPAN ?}
421Comprehensive Perl Archive Network
422\begin{itemize}
423\item \href{http://search.cpan.org}{http://search.cpan.org}
424\item dépot de modules perl
425\item contributions bénévoles
426\end{itemize}
427\end{block}
428\pause
429\begin{alertblock}{Regardez sur le CPAN}
430Ne réinventez pas la roue !
431\end{alertblock}
432\end{frame}
433
434\begin{frame}[fragile]
435\frametitle{Utilisation d'un module}
436\begin{block}{use: syntaxe}
437\verb+use MODULE @IMPORT;+
438\end{block}
439\pause
440\begin{exampleblock}{File::Spec}
441\scriptsize{\verbatiminput{filespec.pl}}
442\end{exampleblock}
443\end{frame}
444
445\begin{frame}[fragile]
446\frametitle{Exercice: which}
447\begin{block}{which ?}
448Ecrire un script qui affiche l'emplacement d'un executable.
449Le module \verb+File::Which+ peut servir !
450\end{block}
451\pause
452\begin{exampleblock}{Solution}
453\scriptsize{\verbatiminput{filewhich.pl}}
454\end{exampleblock}
455\end{frame}
456
457\subsection{Parser la ligne de commande}
458
459\begin{frame}
460\frametitle{Getopt::Std}
461\begin{exampleblock}{Exemple}
462\scriptsize{\verbatiminput{getoptstd.pl}}
463\end{exampleblock}
464\end{frame}
465
466\begin{frame}[fragile]
467\frametitle{Getopt::Long}
468\begin{block}{Exercice}
469Refaire la même chose avec Getopt::Long:
470\begin{itemize}
471\item l'argument de \verb+-p+ est affiché
472\item \verb+-t+ ne fais rien
473\end{itemize}
474\end{block}
475\end{frame}
476
477\begin{frame}[frame]
478\frametitle{Getopt::Long}
479\begin{exampleblock}{Exemple}
480\scriptsize{\verbatiminput{getoptlong.pl}}
481\end{exampleblock}
482\end{frame}
483
484\section{Exercice final}
485
486\begin{frame}[fragile]
487\frametitle{ProblÚme}
488\begin{block}{Enoncé:}
489Ecrire un programme qui affiche le numéro de port dédié à un couple
490service/protocole. Un switch permettra de trouver le service à partir du numéro
491de port.
492\end{block}
493
494\begin{block}{Informations:}
495Ces informations sont stockées dans le fichier \verb+/etc/services+:
496\begin{verbatim}
497ssh  22/tcp  # SSH Remote Login Protocol
498\end{verbatim}
499\begin{itemize}
500\item Format: \verb+NOM PORT/PROTOCOL+
501\item tout ce qui suit un \verb+#+ est du commentaire
502\end{itemize}
503\end{block}
504\end{frame}
505
506\begin{frame}
507\frametitle{Solution 1: utilisez les fonctions std}
508\begin{exampleblock}{}
509\scriptsize{\verbatiminput{services.pl}}
510\end{exampleblock}
511\end{frame}
512
513\begin{frame}
514\frametitle{Solution 2: Parser le fichier}
515\tiny{\verbatiminput{services-file.pl}}
516\end{frame}
517
518\end{document}
Note: See TracBrowser for help on using the repository browser.