Outils pour utilisateurs

Outils du site


perl:references

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
perl:references [2010/11/27 11:31] rootperl:references [2013/03/12 23:33] (Version actuelle) root
Ligne 1: Ligne 1:
 +====== Références ======
 +
 ====== 1. Introduction ====== ====== 1. Introduction ======
  
Ligne 13: Ligne 15:
  
 Si vous avez déjà des variables et que vous voulez obtenir leur référence, il suffit d'utiliser l'opérateur //backslash// : Si vous avez déjà des variables et que vous voulez obtenir leur référence, il suffit d'utiliser l'opérateur //backslash// :
 +<code perl>
   my $ref_scalaire = \$scalaire;   my $ref_scalaire = \$scalaire;
   my $ref_liste = \@liste;   my $ref_liste = \@liste;
   my $ref_hash = \%hash;   my $ref_hash = \%hash;
 +</code>
  
 ===== Définir directement des références ===== ===== Définir directement des références =====
  
 Il peut être utile d'obtenir des références sans créer au préalable une variable, par exemple pour initialiser des structures de données que l'on utilisera que via leur référence : Il peut être utile d'obtenir des références sans créer au préalable une variable, par exemple pour initialiser des structures de données que l'on utilisera que via leur référence :
 +<code perl>
   my $ref_scalaire = \42;   my $ref_scalaire = \42;
   my $ref_liste = ["pierre", "papier", "ciseau"];   my $ref_liste = ["pierre", "papier", "ciseau"];
   my $ref_hash = { "nom" => "Perl", "date" => "1987" };   my $ref_hash = { "nom" => "Perl", "date" => "1987" };
 +</code>
  
 Notez l'utilisation des crochets et des accolades en lieu et place des parenthèses. Notez l'utilisation des crochets et des accolades en lieu et place des parenthèses.
Ligne 30: Ligne 36:
  
 La référence en tant que telle ne représente pas la structure qu'elle désigne, par exemple si on l'affiche : La référence en tant que telle ne représente pas la structure qu'elle désigne, par exemple si on l'affiche :
 +<code perl>
   my $ref = \42;   my $ref = \42;
   print "$ref\n"; # Affiche SCALAR(0x814f5e8)   print "$ref\n"; # Affiche SCALAR(0x814f5e8)
 +</code>
  
 ===== Déréférencement ===== ===== Déréférencement =====
  
 Pour manipuler la structure de donnée référencée, on préfixe par le symbole du type référencé et on met la référence entre accolades : Pour manipuler la structure de donnée référencée, on préfixe par le symbole du type référencé et on met la référence entre accolades :
 +<code perl>
   my $ref = \42;   my $ref = \42;
   print "${$ref}\n"; # Affiche 42   print "${$ref}\n"; # Affiche 42
Ligne 46: Ligne 55:
   print join(" - ", keys %{$ref_hash});   print join(" - ", keys %{$ref_hash});
   print %{$ref_hash}{"nom"};   print %{$ref_hash}{"nom"};
 +</code>
  
 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 :
 +<code perl>
   my $ref_liste = ["pierre", "papier", "ciseau"];   my $ref_liste = ["pierre", "papier", "ciseau"];
   print $ref_liste->[0];   print $ref_liste->[0];
Ligne 53: Ligne 64:
   my $ref_hash = { "nom" => "Perl", "date" => "1987" };   my $ref_hash = { "nom" => "Perl", "date" => "1987" };
   print $ref_hash->{"nom"};   print $ref_hash->{"nom"};
 +</code>
  
 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'implémenter les tableaux multidimensionnels sans s'arracher les cheveux) : 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'implémenter les tableaux multidimensionnels sans s'arracher les cheveux) :
 +<code perl>
   my @matrice = (   my @matrice = (
   [1, 0, 2],   [1, 0, 2],
Ligne 63: Ligne 76:
   print $matrice[$_]->[$_] foreach (1..3);   print $matrice[$_]->[$_] foreach (1..3);
   print $matrice[$_][$_] foreach (1..3);   print $matrice[$_][$_] foreach (1..3);
 +</code>
  
 ===== Copie ===== ===== Copie =====
  
 Si on copie des références, on ne copie pas les structures de données qu'elles désignent. On obtient simplement deux noms pour accéder aux mêmes données : Si on copie des références, on ne copie pas les structures de données qu'elles désignent. On obtient simplement deux noms pour accéder aux mêmes données :
 +<code perl>
   my $number = 42;   my $number = 42;
   my $ref1 = \$number;   my $ref1 = \$number;
Ligne 73: Ligne 88:
   my $ref2 = $ref1;   my $ref2 = $ref1;
   ${$ref2} = 57; # $number vaut 57   ${$ref2} = 57; # $number vaut 57
 +</code>
  
 ===== Exemples ===== ===== Exemples =====
  
 Avec un hash de listes : Avec un hash de listes :
 +<code perl>
   my %notes = (   my %notes = (
   "Pierre" => [15, 12, 10.5],   "Pierre" => [15, 12, 10.5],
Ligne 84: Ligne 100:
   print "La dernière note de Pierre est ${$notes{"Pierre"}}[0]";   print "La dernière note de Pierre est ${$notes{"Pierre"}}[0]";
   print "La dernière note de Pierre est $notes{"Pierre"}->[0]";   print "La dernière note de Pierre est $notes{"Pierre"}->[0]";
 +</code>
  
 Ou alors une liste de hashes: quand on parcourt la liste, les éléments sont des références, on utilise donc de préférence la notation Ou alors une liste de hashes: quand on parcourt la liste, les éléments sont des références, on utilise donc de préférence la notation
   $_->... :   $_->... :
-  + 
 +<code perl>
   my @eleves = (   my @eleves = (
   { "nom" => "Pierre", "moyenne" => 12.5, niveau => "2" },   { "nom" => "Pierre", "moyenne" => 12.5, niveau => "2" },
Ligne 96: Ligne 114:
   print "$_->{'nom'} a une moyenne de $_->{'moyenne'}";   print "$_->{'nom'} a une moyenne de $_->{'moyenne'}";
   }   }
 +</code>
  
 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 //@_// :
 +<code perl>
   sub rapport {   sub rapport {
   my $temperatures = shift;   my $temperatures = shift;
Ligne 104: Ligne 124:
   (1..12);   (1..12);
   }   }
 +</code>
  
 **Références à des références :** **Références à des références :**
-<code>+<code perl>
 my $maison = "maison particulière préfabriquée"; my $maison = "maison particulière préfabriquée";
 my @voitures = ("Citroën","Peugeot","Renault","Porsche"); my @voitures = ("Citroën","Peugeot","Renault","Porsche");
perl/references.txt · Dernière modification : 2013/03/12 23:33 de root