Les références

Une référence est une variable scalaire qui donne l'adresse mémoire d'une variable. Toute variable a une référence. Lorsqu'une référence est déréférencée on retrouve la valeur de la variable.

Il existe 5 types de référence.
 
Référencement  Déréférencement 
$refScalaire = \$Scalaire;  ${$refScalaire} 
$refVecteur = \@Vecteur; @{$refVecteur}
$refVecteurAssoc = \%VecteurAssociatif;  %{$refVecteurAssociatif}
$refFonction = \&Fonction;  &{$refFonction}
$refReférence = \$refScalaire; ${${$refReférence}}}

Les références sont utilisées pour passer des vecteur à une fonction.

Voici un contre-exemple de passage de vecteurs à une fonction :

Fonction ( (1..5), ("A".."F"));

sub Fonction{
         (@vect1, @vect2) = @_;

        print("Le premier vecteur est @vect1.\n");
        print("Le second vecteur est @vect2.\n");
}


Voici un exemple correct de passage de vecteurs à une fonction. On passe les références des vecteurs.

Fonction ( \(1..5), \("A".."F"));

sub Fonction{
         ($refVect1, $refVect2) = @_;

        print("Le premier vecteur est @{$refVect1}.\n");
        print("Le second vecteur est @{$refVect2}.\n");
}

La fonction ref()

La fonction ref(référence) retourne le type de variable référencée.

$scalaire = 10;
@vecteur = (1,2);
%vectAssoc = ("1" => "Salut");

printref( $scalaire, @vecteur, %vectAssoc);
printref( \$scalaire,\@vecteur, \%vectAssoc);
printref( \&printref, \\$scalaire );

sub printref{
        foreach(@_){
            $reftype = ref($_);
            defined($reftype) ? print "$reftype " : print("Ce n\'est pas une ref ");
        }
        print "\n";
}

L'opérateur ->

Il est possible d'avoir accès au contenu d'un vecteur associatif depuis sa référence en utilisant l'opérateur ->.

Nous donnons ici une illustration de l'utilisation de l'opérateur ->.

%VectAss1 = ( "Couleur" => "Bleu",
                         "Nom" => "Millan",
                         "Numero" => 12545);

%VectAss2 = ("Couleur" => "Rouge",
                       "Nom" => "Hillard",
                       "Numero" => 6789);

@database = (\%VectAss1, \%VectAss2);

print ( %{$database[0]}->{"Couleur"});


En voici une autre.

%database = (
                  "Jeudi" => { "Nom" =>"Bleu",
                               "Couleur" => "Vermeil",
                               "Numero" => 123
                  },
                  "Vendredi" =>{"Nom" => "Vert",
                                 "Couleur" => "Turquoise",
                                 "Numéro" => 456
                  }
);

print %{$database{"Jeudi"}}->{"Numero"}."\n";


suite-index