perl:references
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| perl:references [2009/03/15 00:48] – créée root | perl:references [2013/03/12 23:33] (Version actuelle) – root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | == 1. Introduction == | + | ====== Références ====== |
| + | |||
| + | ====== 1. Introduction | ||
| Par conception, les listes et les hashes de Perl ne peuvent contenir que des éléments de type scalaire. C'est dommage, cela peut être à priori très utilie d' | Par conception, les listes et les hashes de Perl ne peuvent contenir que des éléments de type scalaire. C'est dommage, cela peut être à priori très utilie d' | ||
| - | La solution consiste à pouvoir désigner n' | + | La solution consiste à pouvoir désigner n' |
| L' | L' | ||
| - | == 2. Créer des références == | + | ====== 2. Créer des références |
| - | === Obtenir la référence d'une variable === | + | ===== Obtenir la référence d'une variable |
| - | Si vous avez déjà des variables et que vous voulez obtenir leur référence, | + | Si vous avez déjà des variables et que vous voulez obtenir leur référence, |
| - | my $ref_scalaire = \$scalaire; | + | <code perl> |
| - | my $ref_liste | + | |
| - | my $ref_hash | + | my $ref_liste = \@liste; |
| + | my $ref_hash = \%hash; | ||
| + | </ | ||
| - | === Définir directement des références === | + | ===== Définir directement des références |
| Il peut être utile d' | Il peut être utile d' | ||
| - | my $ref_scalaire = \42; | + | <code perl> |
| - | my $ref_liste | + | my $ref_scalaire = \42; |
| - | my $ref_hash | + | my $ref_liste = [" |
| + | my $ref_hash = { " | ||
| + | </ | ||
| Notez l' | Notez l' | ||
| - | == 3. Utilisation des références == | + | ====== 3. Utilisation des références |
| La référence en tant que telle ne représente pas la structure qu' | La référence en tant que telle ne représente pas la structure qu' | ||
| - | my $ref = \42; | + | <code perl> |
| - | print " | + | my $ref = \42; |
| + | print " | ||
| + | </ | ||
| - | === Déréférencement === | + | ===== Déréférencement |
| Pour manipuler la structure de donnée référencée, | Pour manipuler la structure de donnée référencée, | ||
| - | my $ref = \42; | + | <code perl> |
| - | print " | + | my $ref = \42; |
| - | + | print " | |
| - | my $ref_liste = [" | + | |
| - | print join(" - ", @{$ref_liste}); | + | my $ref_liste = [" |
| - | print ${$ref_liste}[0]; | + | print join(" - ", @{$ref_liste}); |
| - | + | print ${$ref_liste}[0]; | |
| - | my $ref_hash = { " | + | |
| - | print join(" - ", keys %{$ref_hash}); | + | my $ref_hash = { " |
| - | print %{$ref_hash}{" | + | print join(" - ", keys %{$ref_hash}); |
| + | print %{$ref_hash}{" | ||
| + | </ | ||
| Souvent, on veut juste extraire un élément d'une liste ou d'un hash, et cette syntaxe est trop lourde et peu lisible. Dans ce cas, il existe un raccourci : | Souvent, on veut juste extraire un élément d'une liste ou d'un hash, et cette syntaxe est trop lourde et peu lisible. Dans ce cas, il existe un raccourci : | ||
| - | my $ref_liste = [" | + | <code perl> |
| - | print $ref_liste-> | + | my $ref_liste = [" |
| - | + | print $ref_liste-> | |
| - | my $ref_hash = { " | + | |
| - | print $ref_hash-> | + | my $ref_hash = { " |
| + | print $ref_hash-> | ||
| + | </ | ||
| Il existe enfin un dernier raccourci: il est possible de ne pas spécifier la flèche entre deux indiçages de liste (ceci permettant d' | Il existe enfin un dernier raccourci: il est possible de ne pas spécifier la flèche entre deux indiçages de liste (ceci permettant d' | ||
| - | my @matrice = ( | + | <code perl> |
| + | my @matrice = ( | ||
| [1, 0, 2], | [1, 0, 2], | ||
| [0, 1, 0], | [0, 1, 0], | ||
| [3, 0, 1] | [3, 0, 1] | ||
| ); | ); | ||
| - | print ${$matrice[$_]}[$_] foreach (1..3); | + | |
| - | print $matrice[$_]-> | + | print $matrice[$_]-> |
| - | print $matrice[$_][$_] foreach (1..3); | + | print $matrice[$_][$_] foreach (1..3); |
| + | </ | ||
| - | === Copie === | + | ===== Copie ===== |
| Si on copie des références, | Si on copie des références, | ||
| - | my $number = 42; | + | <code perl> |
| - | my $ref1 = \$number; | + | my $number = 42; |
| - | | + | my $ref1 = \$number; |
| - | + | ${$ref1} = 33; # $number vaut 33 | |
| - | my $ref2 = $ref1; | + | |
| - | | + | my $ref2 = $ref1; |
| + | ${$ref2} = 57; # $number vaut 57 | ||
| + | </ | ||
| - | + | ===== Exemples | |
| - | === Exemples === | + | |
| Avec un hash de listes : | Avec un hash de listes : | ||
| - | my %notes = ( | + | <code perl> |
| + | my %notes = ( | ||
| " | " | ||
| - | " | + | " |
| ); | ); | ||
| - | print "La dernière note de Pierre est ${$notes{" | + | |
| - | print "La dernière note de Pierre est $notes{" | + | print "La dernière note de Pierre est $notes{" |
| + | </ | ||
| - | Ou alors une liste de hashes: quand on parcourt la liste, les éléments sont des références, | + | Ou alors une liste de hashes: quand on parcourt la liste, les éléments sont des références, |
| - | | + | $_->... : |
| - | + | ||
| - | my @eleves = ( | + | <code perl> |
| + | | ||
| { " | { " | ||
| - | { " | + | { " |
| ); | ); | ||
| - | foreach (@eleves) { | + | |
| print " | print " | ||
| print " | print " | ||
| - | } | + | |
| + | </ | ||
| - | Enfin, les références sont particulièrement utiles pour pouvoir passer des listes et des hashes à des fonctions sans que ces dernières soit mises à plat dans la liste '' | + | Enfin, les références sont particulièrement utiles pour pouvoir passer des listes et des hashes à des fonctions sans que ces dernières soit mises à plat dans la liste //@_// : |
| - | sub rapport { | + | <code perl> |
| + | | ||
| my $temperatures = shift; | my $temperatures = shift; | ||
| - | my $precipitation | + | my $precipitation = shift; |
| - | print "Mois $_: $temperatures-> | + | print "Mois $_: $temperatures-> |
| (1..12); | (1..12); | ||
| - | } | + | |
| + | </ | ||
| + | |||
| + | **Références à des références :** | ||
| + | <code perl> | ||
| + | my $maison = " | ||
| + | my @voitures = (" | ||
| + | my %famille = (femme => " | ||
| + | my %pointeur_hash = ( | ||
| + | | ||
| + | | ||
| + | | ||
| + | ); | ||
| + | my $pointeur = \%pointeur_hash; | ||
| + | |||
| + | print "(1.) $pointeur-> | ||
| + | print "(2.) ${$pointeur-> | ||
| + | print "(3.) $pointeur-> | ||
| + | print "(4.) @{$pointeur-> | ||
| + | print "(5.) $pointeur-> | ||
| + | print "(6.) $pointeur-> | ||
| + | print "(7.) $pointeur-> | ||
| + | print " | ||
| + | print "(9.) $pointeur-> | ||
| + | print "(10.) $pointeur-> | ||
| + | </ | ||
| + | Affichera : | ||
| + | < | ||
| + | (1.) SCALAR(0x8154558)< | ||
| + | (2.) maison particulière préfabriquée< | ||
| + | (3.) ARRAY(0x8154588)< | ||
| + | (4.) Citr& | ||
| + | (5.) Renault< | ||
| + | (6.) Porsche< | ||
| + | (7.) HASH(0x8154a44)< | ||
| + | (8.) filleAnnefilsFlorianfemmeFanny< | ||
| + | (9.) Fanny< | ||
| + | (10.) Florian< | ||
| + | </ | ||
perl/references.1237078136.txt.gz · Dernière modification : de root
