Références Perl

Une référence est un pointeur. Une référence Perl est un type scalaire qui peut pointer vers des variables, des tableaux, des hachages (aussi appelés tableaux associatifs), et même des sous-routines, et elle peut être utilisée n'importe où dans le programme.


Création de références

Lors de la définition d'une variable, faites précéder le nom de la variable d'un \ pour obtenir une référence à cette variable, par exemple :

$scalarref = \$foo;     # 标量变量引用
$arrayref  = \@ARGV;    # 列表的引用
$hashref   = \%ENV;     # 哈希的引用
$coderef   = \&handler; # 子过程引用
$globref   = \*foo;     # GLOB句柄引用

Dans les tableaux, nous pouvons utiliser des références de tableau anonymes, définies avec [] :

$aref= [ 1,"foo",undef,13 ];

Les éléments d'un tableau anonyme peuvent eux-mêmes être des tableaux anonymes, nous pouvons donc utiliser cette méthode pour construire des tableaux de tableaux, et des tableaux de n'importe quelle dimension.

my $aref = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
]

Dans les hash, nous pouvons utiliser des références anonymes de hash, définies avec {} :

$href= { APR =>4, AUG =>8 };

Nous pouvons également créer une référence anonyme de sous-routine sans nom de sous-routine :

$coderef = sub { print "Example!\n" };

Déréférencement

Le déréférencement peut être effectué en utilisant $, @ ou % selon le type, par exemple :

Exemples

#!/usr/bin/perl $var = 10; # $r fait référence au scalaire $var $r = \$var; # Affiche la valeur de la variable stockée par $r print "$varest :", $$r, "\n"; @var = (1, 2, 3); # $r fait référence au tableau @var $r = \@var; # Affiche la valeur de la variable stockée par $r print "@var est :", @$r, "\n"; %var = ('key1' => 10, 'key2' => 20); # $r fait référence au hash %var $r = \%var; # Affiche la valeur de la variable stockée par $r print "\%var est :", %$r, "\n";

L'exécution de l'exemple ci-dessus produit le résultat suivant :

10 为 : 10
1 2 3 为: 123
\%var 为 : key110key220

Si vous n'êtes pas sûr du type de la variable, vous pouvez utiliserrefpour le déterminer. Les valeurs de retour sont les suivantes. Si aucune des valeurs suivantes ne s'applique, false est renvoyé :

SCALAR
ARRAY
HASH
CODE
GLOB
REF

Exemple :

Exemples

#!/usr/bin/perl $var = 10; $r = \$var; print "Type de référence de r :", ref($r), "\n"; @var = (1, 2, 3); $r = \@var; print "Type de référence de r :", ref($r), "\n"; %var = ('key1' => 10, 'key2' => 20); $r = \%var; print "Type de référence de r :", ref($r), "\n";

L'exécution de l'exemple ci-dessus produit le résultat suivant :

r 的引用类型 : SCALAR
r 的引用类型 : ARRAY
r 的引用类型 : HASH

Références circulaires

Les références circulaires se produisent lorsque deux références se contiennent mutuellement. Vous devez les utiliser avec précaution, sinon cela provoquera des fuites de mémoire, comme dans l'exemple suivant :

Exemples

#!/usr/bin/perl my $foo = 100; $foo = \$foo; print "La valeur de foo est : ", $$foo, "\n";

L'exécution de l'exemple ci-dessus produit le résultat suivant :

Value of foo is : REF(0x9aae38)

Références de fonctions

Format d'une référence de fonction : \&

Format d'appel d'une référence de fonction : & + le nom de la référence créée.

Exemple :

Exemples

#!/usr/bin/perl # Définition de fonction sub PrintHash{ my (%hash) = @_; foreach $item (%hash){ print "Elements:$item\n"; } } %hash = ('name' => 'example', 'age' => 3); # Créer une référence à la fonction $cref = \&PrintHash; # Appeler la fonction en utilisant la référence &$cref(%hash);

L'exécution de l'exemple ci-dessus produit le résultat suivant :

元素 : age
元素 : 3
元素 : name
元素 : example
Autres extensions