source: trunk/perl/variablesbis.tex @ 178

Last change on this file since 178 was 178, checked in by nanardon, 16 years ago
  • beautify
  • Property svn:keywords set to Id
File size: 4.8 KB
RevLine 
[150]1% $Id$
2
[156]3\section{Variables bis}
4
5\subsection{Références}
6
7\begin{frame}[fragile]
8\frametitle{Référence: Concept}
[178]9\begin{block}{Quoi ça ?}
[156]10C'est une valeur scalaire\ldots
11
12\pause
13\vfill
14qui fait référence à un scalaire, un tableau ou un hash.
15
16\pause
17\vfill
18\begin{itemize}
19\item elle contient l'adresse mémoire de l'élément pointé
20\pause
21\item plusieurs références peuvent pointer la même variable
22\pause
23\item on peut faire des tableaux de références\ldots
24\end{itemize}
[178]25\end{block}
[156]26\pause
27\vfill
[178]28\begin{alertblock}{Ce n'est pas un pointeur au sens C du terme}
29\verb.$ref++;. ne donnera rien de bien !!!!
30
31On fait du perl, on ne joue pas avec les octets de la mémoire.
32\end{alertblock}
[156]33\end{frame}
34
35\begin{frame}[fragile]
36\frametitle{Créer des références}
[178]37\begin{exampleblock}{Renvoyer la référence de}
38\verb+\+ pour renvoyer un référence:
[156]39\begin{verbatim}
[178]40my $ref = \$scalaire;
41my $ref = \@tableau;
42my $ref = \%hash;
[156]43\end{verbatim}
[178]44\end{exampleblock}
[156]45\vfill
46\pause
[178]47
48\begin{block}{Créer une référence:}
49\begin{tabular}{|l|c|}
50\hline
51Type de variable&code\\
52\hline
53\hline
54tableau&\verb+[ 'val1', 'val2' ]+\\
55\hline
56hash&\verb+{ key => val }+\\
57\hline
58\end{tabular}
59\end{block}
[156]60\end{frame}
61
62\begin{frame}[fragile]
63\frametitle{Utiliser les références}
64
[178]65\begin{exampleblock}{prenons une référence}
[156]66\begin{verbatim}
[178]67$ref = { key => 'val' }; print $ref;
68HASH(0x8bca880)
[156]69\end{verbatim}
[178]70\end{exampleblock}
[156]71\pause
[178]72
73\begin{block}{Accès aux variable}
74\center
75\begin{tabular}{|l|c|c|}
76\hline
77type&variables&éléments de\\
78\hline
79\hline
80scalaire&\verb+$$var+&\\
81\hline
82tableau&\verb+@{$ref}+&\verb+$ref->[0]+\\
83\hline
84hash&\verb+%{$ref}+&\verb+$ref->{'key'}+\\
85\hline
86\end{tabular}
87\end{block}
[156]88\pause
[178]89
90\begin{exampleblock}{}
[156]91\begin{verbatim}
[178]92foreach my $key (keys %$ref) {
93    print "$ref->{$key}\n";
94}
[156]95\end{verbatim}
[178]96\end{exampleblock}
[156]97\end{frame}
98
99\begin{frame}[fragile]
100\frametitle{Pourquoi les références ?}
[178]101\begin{alertblock}{Perl aplati les listes, remember ?}
[156]102
103\pause
104\begin{verbatim}
105my @tab1 = (1,2); my @tab2 = (3,4);
106my @tab = (@tab1, @tab2);
107\end{verbatim}
108\verb+@tab+ contient 4 éléments...
[178]109\end{alertblock}
[156]110\pause
[178]111
112\begin{block}{par contre:}
[156]113\begin{verbatim}
114my @tab1 = (1,2); my @tab2 = (3,4);
115my @tab = (\@tab1, \@tab2);
116\end{verbatim}
117\verb+@tab+ contient 2 éléments qui réferencent des tableaux.
[178]118\end{block}
[156]119\pause
120
[178]121\begin{block}{On accède aux valeurs:}
[156]122\begin{verbatim}
123$tab[0]->[0];
124$tab[0][0];
125\end{verbatim}
[178]126\end{block}
[156]127
128\end{frame}
129
130\begin{frame}[fragile]
[157]131\frametitle{Références: les pièges}
[178]132\begin{alertblock}{Déférencer un undef:}
[157]133\begin{verbatim}
134perl -we 'my $ref; print @{ $ref }'
135Use of uninitialized value $ref in
136array dereference at -e line 1.
137\end{verbatim}
[178]138\end{alertblock}
[157]139\pause
140\vfill
[178]141\begin{alertblock}{Attention au type de variable référencée:}
[157]142\begin{verbatim}
143perl -we 'my $ref = {}; print @{ $ref }'
144Not an ARRAY reference at -e line 1.
145\end{verbatim}
[178]146\end{alertblock}
[157]147\pause
148\vfill
[178]149\begin{alertblock}{Attention au structure complexes:}
[157]150\begin{verbatim}
151$ref->[0][2]{daleks}[0]{episode}
152    {$ennemi}{histoire}[0];
153\end{verbatim}
[178]154\end{alertblock}
[157]155\end{frame}
156
157\subsection{les descripteurs de fichier}
158
159\begin{frame}[fragile]
160\frametitle{Fichiers: Version simple}
[178]161\begin{exampleblock}{Ouvrir un fichier en lecture:}
[157]162\begin{verbatim}
163open(my $handle, '<', 'fichier');
164\end{verbatim}
[178]165\end{exampleblock}
[157]166\pause
[178]167\begin{exampleblock}{Lire une ligne:}
[157]168\begin{verbatim}
169my $line = <$handle>;
170chomp($line); # strip cariage return
171\end{verbatim}
[178]172\end{exampleblock}
[157]173\pause
[178]174\begin{exampleblock}{Fermer le fichier:}
[157]175\begin{verbatim}
176close($handle);
177\end{verbatim}
[178]178\end{exampleblock}
[157]179\pause
180\vfill
[178]181\begin{alertblock}{Ancienne méthode (perl < 5.6)}
[157]182\begin{verbatim}
183open(HANDLE, '<', 'fichier');
184my $line = <HANDLE>;
185close(HANDLE);
186\end{verbatim}
[178]187\end{alertblock}
[157]188\end{frame}
189
190\begin{frame}[fragile]
191\frametitle{Fichier: version simple (suite)}
192
[178]193\begin{exampleblock}{Ecrire}
[157]194\begin{verbatim}
195open(my $handle, '>', 'fichier');
[178]196print $handle "Exterminate !\n";
197close($handle);
[157]198\end{verbatim}
[178]199\end{exampleblock}
[157]200\pause
201
[178]202\begin{alertblock}{Attention à print}
203pas de \verb+,+ après le file handle
204\end{alertblock}
205
[157]206\pause
207\vfill
[178]208\begin{block}{File handle par défaut}
209\begin{itemize}
210\item \verb+STDERR+ (sortie d'erreur)
211\item \verb+STDOUT+ (sortie standard)
212\item \verb+STDIN+ (entrée standard)
213\end{itemize}
214\end{block}
[157]215\end{frame}
216
217\begin{frame}[fragile]
218\frametitle{Fichiers: Version compliquée}
[178]219\begin{block}{haut niveau}
[157]220\begin{itemize}
221\item open()/close()
222\item read()/print()
223\end{itemize}
[178]224\end{block}
[157]225
[178]226\pause
[157]227\vfill
[178]228\begin{block}{bas niveau}
[157]229\begin{itemize}
230\item sysopen()/sysclose()
231\item sysread()/syswrite()
232\end{itemize}
[178]233\end{block}
234
[157]235\pause
236\vfill
[178]237\begin{block}{Glob !}
238Pour info, un filehandle est une variable de type \textbf{GLOB}.
239\end{block}
240
241\pause
[157]242\vfill
[178]243\begin{block}{Si vraiment vous voulez en savoir plus: man}
[157]244\begin{itemize}
245\item perlfunc
246\item perlopentut
247\end{itemize}
[178]248\end{block}
[157]249\end{frame}
250
Note: See TracBrowser for help on using the repository browser.