source: tags/20080918/perl/perl.variablesbis.tex @ 190

Last change on this file since 190 was 183, checked in by nanardon, 16 years ago
  • rename tex files
  • Property svn:keywords set to Id
File size: 4.8 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}
9\begin{block}{Quoi ça ?}
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}
25\end{block}
26\pause
27\vfill
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}
33\end{frame}
34
35\begin{frame}[fragile]
36\frametitle{Créer des références}
37\begin{exampleblock}{Renvoyer la référence de}
38\verb+\+ pour renvoyer un référence:
39\begin{verbatim}
40my $ref = \$scalaire;
41my $ref = \@tableau;
42my $ref = \%hash;
43\end{verbatim}
44\end{exampleblock}
45\vfill
46\pause
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}
60\end{frame}
61
62\begin{frame}[fragile]
63\frametitle{Utiliser les références}
64
65\begin{exampleblock}{prenons une référence}
66\begin{verbatim}
67$ref = { key => 'val' }; print $ref;
68HASH(0x8bca880)
69\end{verbatim}
70\end{exampleblock}
71\pause
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}
88\pause
89
90\begin{exampleblock}{}
91\begin{verbatim}
92foreach my $key (keys %$ref) {
93    print "$ref->{$key}\n";
94}
95\end{verbatim}
96\end{exampleblock}
97\end{frame}
98
99\begin{frame}[fragile]
100\frametitle{Pourquoi les références ?}
101\begin{alertblock}{Perl aplati les listes, remember ?}
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...
109\end{alertblock}
110\pause
111
112\begin{block}{par contre:}
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.
118\end{block}
119\pause
120
121\begin{block}{On accède aux valeurs:}
122\begin{verbatim}
123$tab[0]->[0];
124$tab[0][0];
125\end{verbatim}
126\end{block}
127
128\end{frame}
129
130\begin{frame}[fragile]
131\frametitle{Références: les pièges}
132\begin{alertblock}{Déférencer un undef:}
133\begin{verbatim}
134perl -we 'my $ref; print @{ $ref }'
135Use of uninitialized value $ref in
136array dereference at -e line 1.
137\end{verbatim}
138\end{alertblock}
139\pause
140\vfill
141\begin{alertblock}{Attention au type de variable référencée:}
142\begin{verbatim}
143perl -we 'my $ref = {}; print @{ $ref }'
144Not an ARRAY reference at -e line 1.
145\end{verbatim}
146\end{alertblock}
147\pause
148\vfill
149\begin{alertblock}{Attention au structure complexes:}
150\begin{verbatim}
151$ref->[0][2]{daleks}[0]{episode}
152    {$ennemi}{histoire}[0];
153\end{verbatim}
154\end{alertblock}
155\end{frame}
156
157\subsection{les descripteurs de fichier}
158
159\begin{frame}[fragile]
160\frametitle{Fichiers: Version simple}
161\begin{exampleblock}{Ouvrir un fichier en lecture:}
162\begin{verbatim}
163open(my $handle, '<', 'fichier');
164\end{verbatim}
165\end{exampleblock}
166\pause
167\begin{exampleblock}{Lire une ligne:}
168\begin{verbatim}
169my $line = <$handle>;
170chomp($line); # strip cariage return
171\end{verbatim}
172\end{exampleblock}
173\pause
174\begin{exampleblock}{Fermer le fichier:}
175\begin{verbatim}
176close($handle);
177\end{verbatim}
178\end{exampleblock}
179\pause
180\vfill
181\begin{alertblock}{Ancienne méthode (perl < 5.6)}
182\begin{verbatim}
183open(HANDLE, '<', 'fichier');
184my $line = <HANDLE>;
185close(HANDLE);
186\end{verbatim}
187\end{alertblock}
188\end{frame}
189
190\begin{frame}[fragile]
191\frametitle{Fichier: version simple (suite)}
192
193\begin{exampleblock}{Ecrire}
194\begin{verbatim}
195open(my $handle, '>', 'fichier');
196print $handle "Exterminate !\n";
197close($handle);
198\end{verbatim}
199\end{exampleblock}
200\pause
201
202\begin{alertblock}{Attention à print}
203pas de \verb+,+ après le file handle
204\end{alertblock}
205
206\pause
207\vfill
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}
215\end{frame}
216
217\begin{frame}[fragile]
218\frametitle{Fichiers: Version compliquée}
219\begin{block}{haut niveau}
220\begin{itemize}
221\item open()/close()
222\item read()/print()
223\end{itemize}
224\end{block}
225
226\pause
227\vfill
228\begin{block}{bas niveau}
229\begin{itemize}
230\item sysopen()/sysclose()
231\item sysread()/syswrite()
232\end{itemize}
233\end{block}
234
235\pause
236\vfill
237\begin{block}{Glob !}
238Pour info, un filehandle est une variable de type \textbf{GLOB}.
239\end{block}
240
241\pause
242\vfill
243\begin{block}{Si vraiment vous voulez en savoir plus: man}
244\begin{itemize}
245\item perlfunc
246\item perlopentut
247\end{itemize}
248\end{block}
249\end{frame}
250
Note: See TracBrowser for help on using the repository browser.