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édentes Révision précédente
Prochaine révision
Révision précédente
perl:references [2010/11/27 12:31]
root
perl:references [2013/03/13 00: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.1290857514.txt.gz · Dernière modification: 2010/11/27 12:31 par root