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