Ignore:
Timestamp:
08/26/08 22:25:46 (16 years ago)
Author:
nanardon
Message:
  • beautify
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/perl/variablesbis.tex

    r162 r178  
    77\begin{frame}[fragile] 
    88\frametitle{Référence: Concept} 
     9\begin{block}{Quoi ça ?} 
    910C'est une valeur scalaire\ldots 
    1011 
     
    2223\item on peut faire des tableaux de références\ldots 
    2324\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 
     31On fait du perl, on ne joue pas avec les octets de la mémoire. 
     32\end{alertblock} 
    2733\end{frame} 
    2834 
    2935\begin{frame}[fragile] 
    3036\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} 
     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} 
    6760\end{frame} 
    6861 
    6962\begin{frame}[fragile] 
    7063\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; 
     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} 
    9597\end{frame} 
    9698 
    9799\begin{frame}[fragile] 
    98100\frametitle{Pourquoi les références ?} 
    99 Perl aplati les listes, remember ? 
     101\begin{alertblock}{Perl aplati les listes, remember ?} 
    100102 
    101103\pause 
     
    105107\end{verbatim} 
    106108\verb+@tab+ contient 4 éléments... 
    107 \pause 
     109\end{alertblock} 
     110\pause 
     111 
     112\begin{block}{par contre:} 
    108113\begin{verbatim} 
    109114my @tab1 = (1,2); my @tab2 = (3,4); 
     
    111116\end{verbatim} 
    112117\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:} 
    116122\begin{verbatim} 
    117123$tab[0]->[0]; 
    118 \end{verbatim} 
    119 \pause 
    120 Ou même plus simplement: 
    121 \begin{verbatim} 
    122124$tab[0][0]; 
    123125\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 
    153128\end{frame} 
    154129 
    155130\begin{frame}[fragile] 
    156131\frametitle{Références: les pièges} 
    157 Déférencer un undef: 
     132\begin{alertblock}{Déférencer un undef:} 
    158133\begin{verbatim} 
    159134perl -we 'my $ref; print @{ $ref }' 
     
    161136array dereference at -e line 1. 
    162137\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:} 
    172142\begin{verbatim} 
    173143perl -we 'my $ref = {}; print @{ $ref }' 
    174144Not an ARRAY reference at -e line 1. 
    175145\end{verbatim} 
    176 \pause 
    177 \vfill 
    178 \vfill 
    179 Attention au structure complexes: 
     146\end{alertblock} 
     147\pause 
     148\vfill 
     149\begin{alertblock}{Attention au structure complexes:} 
    180150\begin{verbatim} 
    181151$ref->[0][2]{daleks}[0]{episode} 
    182152    {$ennemi}{histoire}[0]; 
    183153\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} 
    198155\end{frame} 
    199156 
     
    202159\begin{frame}[fragile] 
    203160\frametitle{Fichiers: Version simple} 
    204 Version moderne: 
    205  
    206 Ouvrir un fichier en lecture: 
     161\begin{exampleblock}{Ouvrir un fichier en lecture:} 
    207162\begin{verbatim} 
    208163open(my $handle, '<', 'fichier'); 
    209164\end{verbatim} 
    210 \pause 
    211 Lire une ligne: 
     165\end{exampleblock} 
     166\pause 
     167\begin{exampleblock}{Lire une ligne:} 
    212168\begin{verbatim} 
    213169my $line = <$handle>; 
    214170chomp($line); # strip cariage return 
    215171\end{verbatim} 
    216 \pause 
    217 Fermer le fichier: 
     172\end{exampleblock} 
     173\pause 
     174\begin{exampleblock}{Fermer le fichier:} 
    218175\begin{verbatim} 
    219176close($handle); 
    220177\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)} 
    224182\begin{verbatim} 
    225183open(HANDLE, '<', 'fichier'); 
    226184my $line = <HANDLE>; 
    227 chomp($line); # strip cariage return 
    228185close(HANDLE); 
    229186\end{verbatim} 
     187\end{alertblock} 
    230188\end{frame} 
    231189 
     
    233191\frametitle{Fichier: version simple (suite)} 
    234192 
    235 Ouvrir: 
     193\begin{exampleblock}{Ecrire} 
    236194\begin{verbatim} 
    237195open(my $handle, '>', 'fichier'); 
    238 \end{verbatim} 
    239 \pause 
    240 Écrire: 
    241 \begin{verbatim} 
    242196print $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 
    248 Fermer: 
    249 \begin{verbatim} 
    250197close($handle); 
    251198\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} 
     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} 
    255215\end{frame} 
    256216 
    257217\begin{frame}[fragile] 
    258218\frametitle{Fichiers: Version compliquée} 
    259 Pour des besoins très spécifiques: 
     219\begin{block}{haut niveau} 
    260220\begin{itemize} 
    261221\item open()/close() 
    262222\item read()/print() 
    263223\end{itemize} 
    264  
    265 \vfill 
    266 ou: 
    267 \vfill 
    268 \pause 
     224\end{block} 
     225 
     226\pause 
     227\vfill 
     228\begin{block}{bas niveau} 
    269229\begin{itemize} 
    270230\item sysopen()/sysclose() 
    271231\item sysread()/syswrite() 
    272232\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 !} 
     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} 
    277244\begin{itemize} 
    278245\item perlfunc 
    279 \pause 
    280246\item perlopentut 
    281247\end{itemize} 
    282 \end{frame} 
    283  
     248\end{block} 
     249\end{frame} 
     250 
Note: See TracChangeset for help on using the changeset viewer.