\documentclass[12pt]{beamer}

\usepackage[latin1]{inputenc}
\usepackage{fontenc}
\usepackage[frenchb]{babel}
\usepackage{aeguill}

\usetheme{Madrid}
\definecolor{BackGroundColor}{rgb}{0.95, 0.95, 0.95}
\definecolor{White}{rgb}{1.0, 1.0, 1.0}
\definecolor{Red}{rgb}{1.0, 0.0, 0.0}
\def\filename#1{{\bf{#1}}}
\def\codeline#1{{\it{#1}}}
\def\function#1{{\it{#1}}}

\beamertemplatesolidbackgroundcolor{BackGroundColor!50!White}

\title[Perl pour physiciens]{Perl pour physiciens}
\author{Nicolas Regnault}
\institute{Laboratoire Pierre Aigrain}
\date{26 novembre 2004}

\begin{document}

\frame{\titlepage}

\frame{
Plan du cours:
\begin{itemize}
\item {\color<2>[gray]{0.7}introduction}
\item {\color<2>[gray]{0.7}les variables}
\item {\color<2>[gray]{0.7}les tableaux}
\item {\color<2>[gray]{0.7}les fichiers}
\item {\color<2>[gray]{0.7}les expressions r\'eguli\`eres}
\item les fonctions
\item hygi\`ene et programmation (les 10 commandements)
\item {\color<2>[gray]{0.7}PERL ma\^itre du monde}
\item {\color<2>[gray]{0.7}Exemples \`a la demande}
\end{itemize}
}


\frame{
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\begin{center}Chapitre 6:\\
Les fonctions
\end{center}
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{G\'en\'eralit\'e}
Comment \'ecrire une fonction en PERL?

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
sub mafonction\\
\{\\
instrutions;\\
...\\
\}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{G\'en\'eralit\'e}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
print ("debut de la recherche...{\textbackslash}n");\\
\alert<3>{\&cherchefichier;\\}
print ("fin de la recherche.{\textbackslash}n");\\
\\
\alert<2>{sub cherchefichier\\
\{\\
foreach {\textdollar}fichier({\textless}*.tex{\textgreater})\\
  \{\\
    print ({\textdollar}fichier."{\textbackslash}n");\\
  \}\\
\}\\}
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{G\'en\'eralit\'e}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
sub cherchefichier\\
\{\\
foreach {\textdollar}fichier({\textless}*{\textgreater})\\
  \{\\
\alert<2>{    if (-d {\textdollar}fichier)\\}
      \{\\
\alert<3>{        chdir ({\textdollar}fichier);\\}
\alert<4>{        \&cherchefichier;\\}
\alert<5>{        chdir ("..");\\}
       \}\\
    else\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{G\'en\'eralit\'e}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
    else\\
      \{\\
\alert<2>{        if ({\textdollar}fichier ={\textasciitilde} /{\textbackslash}.tex{\textdollar}/)\\
          \{\\
            print ({\textdollar}fichier."{\textbackslash}n");\\		
          \}\\}
      \}\\
  \}\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{interlude: les variables par d\'efaut}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
{\textdollar}\_ = "essai{\textbackslash}n";\\
print;\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{interlude: les variables par d\'efaut}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
@\_ = ("proton","neutron","electron");\\
foreach  ()\\
\{\\
\only<1>{  print ({\textdollar}\_."{\textbackslash}n");\\}
\only<2>{  print; print ("{\textbackslash}n");\\}
\}
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{G\'en\'eralit\'e}
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
{\textdollar}ligne = "3.14 133 1.6";\\
\alert<2,5>{{\textdollar}ligne .= " ".\&divise({\textdollar}ligne, 0, 2);\\}
print ({\textdollar}ligne."{\textbackslash}n");\\
\\
sub divise\\
\{\\
\alert<3>{@tableau = split (/ /, {\textdollar}\_[0]);\\}
\alert<4>{return ({\textdollar}tableau[{\textdollar}\_[1]] / {\textdollar}tableau[{\textdollar}\_[2]]);\\}
\}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{Port\'ee des variables}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
{\textdollar}variable = 1.0;\\
print ({\textdollar}variable."{\textbackslash}n");\\
\&incremente();\\
print ({\textdollar}variable."{\textbackslash}n");\\
\\
sub incremente\\
\{\\
  {\textdollar}variable++;\\
\}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{Port\'ee des variables}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
\alert<2>{my} {\textdollar}variable = 1.0;\\
print ({\textdollar}variable."{\textbackslash}n");\\
\&incremente();\\
print ({\textdollar}variable."{\textbackslash}n");\\
\\
sub incremente\\
\{\\
  \alert<2>{my} {\textdollar}variable = 1.0;\\
  {\textdollar}variable++;\\
\}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{Passage par r\'ef\'erence}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
my {\textdollar}variable = 1.0;\\
print ({\textdollar}variable."{\textbackslash}n");\\
\&incremente({\textbackslash}{\textdollar}variable);\\
print ({\textdollar}variable."{\textbackslash}n");\\
\\
sub incremente\\
\{\\
  my {\textdollar}parametre = {\textdollar}\_[0];\\
  {\textdollar}{\textdollar}parametre++;\\
\}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 6: Les fonctions}
\framesubtitle{Passage par r\'ef\'erence}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
my @tableau = (1, 4, 9, 16);\\
print (join(" ", @tableau)."{\textbackslash}n");\\
\&ajoute({\textbackslash}@tableau);\\
print (join(" ", @tableau)."{\textbackslash}n");\\
\\
sub ajoute\\
\{\\
  my {\textdollar}parametre = {\textdollar}\_[0];\\
  push (@{\textdollar}parametre, 25);\\
  {\textdollar}{\textdollar}parametre[5] = 36;\\
\}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{
\frametitle{chapitre 6: Les fonctions}
\framesubtitle{Exercices}
\begin{itemize}
\item[1] Reprendre l'exercice 2 du chapitre 4 qui consistait \`a renommer les fichiers en effectuant aussi l'op\'eration dans tous les sous-r\'epertoire.
\item[2] Faire une fonction de recherche de min et max dans un tableau (par r\'ef\'erence ou retour d'un tableau).
\end{itemize}
}

\frame{
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\begin{center}Chapitre 7:\\
Hygi\`ene et programmation: les presque 10 commandements
\end{center}
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
1er commandement: les warnings tu utiliseras
\end{beamerboxesrounded}
\end{center}

}


\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl \only<2>{\alert<2> {-w}}\\
\\
{\textdollar}a = 1.2;\\
{\textdollar}b = "test";\\
{\textdollar}b += {\textdollar}a;\\
print ({\textdollar}b."{\textbackslash}n");\\
\end{beamerboxesrounded}
\end{center}

}


\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
2\`eme commandement: des noms compr\'ehensibles \`a tes variables et fonctions tu donneras
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}
\begin{center}
\only<1>{
{\textdollar}ma\_belle\_variable\\
\&ma\_belle\_fonction\\}
\only<2>{
{\textdollar}MaBelleVariable\\
\&MaBelleFonction\\}

\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
3\`eme commandement: les valeurs en dur tu \'eviteras
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{itemize}
\item STDIN
\item @ARGV
\item fichier externe
\end{itemize}
}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
4\`eme commandement: des fonctions tu abuseras
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
5\`eme commandement: tes fonctions tu documenteras
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\# fonction qui additionne deux nombres\\
\#\\
\# {\textdollar}\_[0] = premier nombre\\
\# {\textdollar}\_[1] = deuxieme nombre\\
\# valeur de retour = somme des deux nombres\\
\\
sub Addition\\
\{\\
  return ({\textdollar}\_[0] + {\textdollar}\_[1]);\\
\}\\
\end{beamerboxesrounded}
\end{center}

}


\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
6\`eme commandement: les variables par d\'efaut tu banniras
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
7\`eme commandement: les variables globales tu \'eviteras
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl\\
\\
\only<3>{use strict 'vars';\\
\\
my {\textdollar}variable = "test{\textbackslash}n";\\}
\only<1-2>{{\textdollar}variable = "test{\textbackslash}n";\\}
print (\alert<2>{{\textdollar}varable});\\
print ("erreur{\textbackslash}n");\\
\end{beamerboxesrounded}
\end{center}

}
\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
8\`eme commandement: ton programme tu a\`ereras
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{itemize}
\item sauts de ligne
\item espaces
\item tabulations
\end{itemize}
}

\frame{

\frametitle{chapitre 7: les presque 10 commandements}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
9\`eme commandement: des commentaires tu ajouteras?
\end{beamerboxesrounded}
\end{center}

}

\frame{
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\begin{center}Chapitre 8:\\
PERL ma\^{\i}tre du monde
\end{center}
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 8: PERL ma\^{\i}tre du monde}
\framesubtitle{utilisation de PERL depuis d'autres programmes}

But:\\
\begin{itemize}
\item lancer PERL depuis LabView.
\item cr\'eer une page web \filename{index.html} avec l'heure et la date et qui affiche deux images enregistr\'ees par LabView.
\item envoyer \filename{index.html}, \filename{image1.jpg} et \filename{image2.jpg} sur un serveur web par FTP.
\end{itemize}

}

\frame{

\frametitle{chapitre 8: PERL ma\^{\i}tre du monde}
\framesubtitle{utilisation de PERL depuis d'autres programmes}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\# cree la page web index.html qui doit etre envoyee par FTP\\
\#\\
\\
sub CreationPageWeb\\
  \{\\
    \alert<2>{my @Date = gmtime(time);}\\
    {\textdollar}Date[5] += 1900;\\
    my {\textdollar}Jour = {\textdollar}Date[3]."/".{\textdollar}Date[4]."/".{\textdollar}Date[5];\\
    my {\textdollar}Heure = {\textdollar}Date[2]."h".{\textdollar}Date[1];\\
    unless (open (OUTFILE, "{\textgreater}index.html"))\\
      {\\
	die ("ne peut creer le fichier index.html{\textbackslash}n");\\
      }\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 8: PERL ma\^{\i}tre du monde}
\framesubtitle{utilisation de PERL depuis d'autres programmes}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
print OUTFILE ("{\textless}html{\textgreater}\\
{\textless}body{\textgreater}\\
page cr{\&}eacute;{\&}eacute;e le ".{\textdollar}Jour." {\&}agrave;".{\textdollar}Heure."{\textless}br /{\textgreater}\\
{\textless}img src={\textbackslash}"image1.jpg{\textbackslash}"{\textgreater}image 1{\textless}/img{\textgreater}{\textless}br /{\textgreater}\\
{\textless}img src={\textbackslash}"image2.jpg{\textbackslash}"{\textgreater}image 2{\textless}/img{\textgreater}{\textless}br /{\textgreater}\\
{\textless}/body{\textgreater}\\
{\textless}/html{\textgreater}{\textbackslash}n");\\
    close(OUTFILE);\\
\}\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 8: PERL ma\^{\i}tre du monde}
\framesubtitle{utilisation de PERL depuis d'autres programmes}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\#!/usr/bin/perl -w\\
\\
use strict 'vars';\\
\alert<2>{use Net::FTP;}\\
\\
{\&}CreationPageWeb();\\
\\
\alert<3>{my {\textdollar}Serveur = "webserver.phys.ens.fr";\\
my {\textdollar}Repertoire = "public\_html/test";\\
my {\textdollar}Utilisateur = "regnault";\\
my {\textdollar}MotDePasse = "*******";}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 8: PERL ma\^{\i}tre du monde}
\framesubtitle{utilisation de PERL depuis d'autres programmes}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\alert<2>{my {\textdollar}Ftp = Net::FTP-{\textgreater}new({\textdollar}Serveur);}\\
\alert<3>{{\textdollar}Ftp-{\textgreater}login({\textdollar}Utilisateur, {\textdollar}MotDePasse);}\\
\alert<4>{{\textdollar}Ftp-{\textgreater}cwd({\textdollar}Repertoire);}\\
\alert<5>{{\textdollar}Ftp-{\textgreater}put("index.html");\\
{\textdollar}Ftp-{\textgreater}put("image1.jpg");\\
{\textdollar}Ftp-{\textgreater}put("image2.jpg");}\\
{\textdollar}Ftp-{\textgreater}quit();\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 8: PERL ma\^{\i}tre du monde}
\framesubtitle{Exercice}

analyser un fichier \filename{fichier.log} et s'il contient le mot alert, envoyez-vous un mail en utilisant MIME::Lite avec le contenu du fichier dans le corps du mail et la date dans le titre.

}


\end{document}