source: trunk/perl/variablesbis.tex @ 176

Last change on this file since 176 was 162, checked in by nanardon, 16 years ago
  • split presentation into separate files
  • Property svn:keywords set to Id
File size: 5.2 KB
Line 
1% $Id$
2
3\section{Variables bis}
4
5\subsection{Références}
6
7\begin{frame}[fragile]
8\frametitle{Référence: Concept}
9C'est une valeur scalaire\ldots
10
11\pause
12\vfill
13qui fait référence à un scalaire, un tableau ou un hash.
14
15\pause
16\vfill
17\begin{itemize}
18\item elle contient l'adresse mémoire de l'élément pointé
19\pause
20\item plusieurs références peuvent pointer la même variable
21\pause
22\item on peut faire des tableaux de références\ldots
23\end{itemize}
24\pause
25\vfill
26\textbf{Ce n'est pas un pointeur au sens C du terme}: \verb.$ref++;. ne donnera rien de bien !!!!
27\end{frame}
28
29\begin{frame}[fragile]
30\frametitle{Créer des références}
31\pause
32Référence de tableaux:
33\pause
34\vfill
35\begin{verbatim}
36my @tableau = (1, 2, 3);
37\end{verbatim}
38\pause
39Récupérer une référence vers:
40\begin{verbatim}
41my $tabref = \@tableau;
42\end{verbatim}
43\pause
44Créer une référence vers un nouveau tableau:
45\begin{verbatim}
46my $tabref = [ @tableau ];
47\end{verbatim}
48\vfill
49\vfill
50\pause
51Référence de hash:
52\pause
53\vfill
54\begin{verbatim}
55my %hash = (a => 1);
56\end{verbatim}
57\pause
58Récupérer une référence vers:
59\begin{verbatim}
60my $hashref = \%hash;
61\end{verbatim}
62\pause
63Créer une référence vers un nouveau tableau:
64\begin{verbatim}
65my $hashref = { %hash } ;
66\end{verbatim}
67\end{frame}
68
69\begin{frame}[fragile]
70\frametitle{Utiliser les références}
71Pour accéder au contenu la variable référencée on utilise \verb+->+.
72\vfill
73Pour acceder à la variable elle même: \verb+$$+, \verb+@$+ et \verb+%$+ pour
74respectivement les scalaires, tableaux et les hash.
75
76\pause
77On créer un réference:
78\begin{verbatim}
79my $tabref = [ 1, 2, 3 ];
80my $hashref = { a => 1 };
81\end{verbatim}
82\pause
83On accède au tableau via la référence:
84\begin{verbatim}
85$tabref->[0];
86$hashref->{a};
87\end{verbatim}
88\pause
89Après tout est presque pareil:
90\begin{verbatim}
91scalar(@$tabref);
92keys %$hashref;
93\end{verbatim}
94
95\end{frame}
96
97\begin{frame}[fragile]
98\frametitle{Pourquoi les références ?}
99Perl aplati les listes, remember ?
100
101\pause
102\begin{verbatim}
103my @tab1 = (1,2); my @tab2 = (3,4);
104my @tab = (@tab1, @tab2);
105\end{verbatim}
106\verb+@tab+ contient 4 éléments...
107\pause
108\begin{verbatim}
109my @tab1 = (1,2); my @tab2 = (3,4);
110my @tab = (\@tab1, \@tab2);
111\end{verbatim}
112\verb+@tab+ contient 2 éléments qui réferencent des tableaux.
113\pause
114
115On accède aux valeurs:
116\begin{verbatim}
117$tab[0]->[0];
118\end{verbatim}
119\pause
120Ou même plus simplement:
121\begin{verbatim}
122$tab[0][0];
123\end{verbatim}
124\ldots qui revient à faire un tableau à 2 dimensions.
125
126\end{frame}
127
128\begin{frame}[fragile]
129\frametitle{Références: copain de la mémoire}
130\begin{small}
131\begin{verbatim}
132# très gros tableau
133my @tab = ();
134
135fonc(@tab);
136
137sub fonc {
138    my @tab = @_; # Créer un copie complète
139}
140\end{verbatim}
141\pause
142\begin{verbatim}
143# très gros tableau
144my @tab = ();
145
146fonc(\@tab);
147
148sub fonc {
149    my ($tab) = @_; # Ne copie que la référence
150}
151\end{verbatim}
152\end{small}
153\end{frame}
154
155\begin{frame}[fragile]
156\frametitle{Références: les pièges}
157Déférencer un undef:
158\begin{verbatim}
159perl -we 'my $ref; print @{ $ref }'
160Use of uninitialized value $ref in
161array dereference at -e line 1.
162\end{verbatim}
163\pause
164Voici l'astuce:
165\begin{verbatim}
166perl -we 'my $ref; print @{ $ref || [] }'
167\end{verbatim}
168\pause
169\vfill
170\vfill
171Attention au type de variable référencée:
172\begin{verbatim}
173perl -we 'my $ref = {}; print @{ $ref }'
174Not an ARRAY reference at -e line 1.
175\end{verbatim}
176\pause
177\vfill
178\vfill
179Attention au structure complexes:
180\begin{verbatim}
181$ref->[0][2]{daleks}[0]{episode}
182    {$ennemi}{histoire}[0];
183\end{verbatim}
184\end{frame}
185
186\begin{frame}[fragile]
187\frametitle{Références: dernières choses}
188On peut connaitre le type de référence avec \verb+ref()+
189\begin{verbatim}
190perl -we 'my $ref = {}; print ref $ref'
191HASH
192\end{verbatim}
193\vfill
194\vfill
195\pause
196Tout est là:\\
197\verb+man perlreref+
198\end{frame}
199
200\subsection{les descripteurs de fichier}
201
202\begin{frame}[fragile]
203\frametitle{Fichiers: Version simple}
204Version moderne:
205
206Ouvrir un fichier en lecture:
207\begin{verbatim}
208open(my $handle, '<', 'fichier');
209\end{verbatim}
210\pause
211Lire une ligne:
212\begin{verbatim}
213my $line = <$handle>;
214chomp($line); # strip cariage return
215\end{verbatim}
216\pause
217Fermer le fichier:
218\begin{verbatim}
219close($handle);
220\end{verbatim}
221\pause
222\vfill
223Ancienne méthode:
224\begin{verbatim}
225open(HANDLE, '<', 'fichier');
226my $line = <HANDLE>;
227chomp($line); # strip cariage return
228close(HANDLE);
229\end{verbatim}
230\end{frame}
231
232\begin{frame}[fragile]
233\frametitle{Fichier: version simple (suite)}
234
235Ouvrir:
236\begin{verbatim}
237open(my $handle, '>', 'fichier');
238\end{verbatim}
239\pause
240Écrire:
241\begin{verbatim}
242print $handle "Exterminate !\n";
243\end{verbatim}
244\begin{textbf}Attention à \verb+print+: pas de \verb+,+ après le file handle\end{textbf}
245
246\pause
247\vfill
248Fermer:
249\begin{verbatim}
250close($handle);
251\end{verbatim}
252\pause
253Trois file handle par défaut: \verb+STDIN+, \verb+STDOUT+, \verb+STDERR+
254(entrée, sortie, sortie d'erreur).
255\end{frame}
256
257\begin{frame}[fragile]
258\frametitle{Fichiers: Version compliquée}
259Pour des besoins très spécifiques:
260\begin{itemize}
261\item open()/close()
262\item read()/print()
263\end{itemize}
264
265\vfill
266ou:
267\vfill
268\pause
269\begin{itemize}
270\item sysopen()/sysclose()
271\item sysread()/syswrite()
272\end{itemize}
273\pause
274\vfill
275\vfill
276Si vraiment vous voulez en savoir plus: \verb+man+
277\begin{itemize}
278\item perlfunc
279\pause
280\item perlopentut
281\end{itemize}
282\end{frame}
283
Note: See TracBrowser for help on using the repository browser.