Citation 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 tables de hachage (également appelées tableaux associatifs) et même des sous-programmes, et peut être appliqué n'importe où dans le programme.
Créer une référence
Lors de la définition d'une variable, ajoutez un devant le nom de la variable pour obtenir une référence à la variable, telle que :
$scalarref = $foo; # 标量变量引用 $arrayref = \@ARGV; # 列表的引用 $hashref = \%ENV; # 哈希的引用 $coderef = \&handler; # 子过程引用 $globref = \*foo; # GLOB句柄引用
Dans le tableau, nous pouvons utiliser des références de tableau anonymes, en utilisant la définition [] :
$aref= [ 1,"foo",undef,13 ];
Les éléments du tableau anonyme peuvent toujours être des tableaux anonymes, nous pouvons donc utiliser cette méthode pour construire un tableau de tableaux, des tableaux de dimensions arbitraires peuvent être construits.
my $aref = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]
Dans le hachage, nous pouvons utiliser des références de hachage anonymes, en utilisant la définition {} :
$href= { APR =>4, AUG =>8 };
Nous pouvons également créer une référence de sous-programme anonyme sans nom de sous-programme :
$coderef = sub { print "php!\n" };
Déréférence
L'annulation de l'application peut être annulée en utilisant $, @ ou % selon différents types. L'exemple est le suivant :
#!/usr/bin/perl $var = 10; # $r 引用 $var 标量 $r = $var; # 输出本地存储的 $r 的变量值 print "$var 为 : ", $$r, "\n"; @var = (1, 2, 3); # $r 引用 @var 数组 $r = \@var; # 输出本地存储的 $r 的变量值 print "@var 为: ", @$r, "\n"; %var = ('key1' => 10, 'key2' => 20); # $r 引用 %var 数组 $r = \%var; # 输出本地存储的 $r 的变量值 print "%var 为 : ", %$r, "\n";
Le résultat de l'exécution de l'exemple ci-dessus est :
.10 为 : 10 1 2 3 为: 123 %var 为 : key110key220
Si vous n'êtes pas sûr du type de variable, vous pouvez utiliser ref pour juger. La liste des valeurs de retour est la suivante. S'il n'y a pas de valeur suivante, false est renvoyé :
SCALAR ARRAY HASH CODE GLOB REF.
L'exemple est le suivant :
#!/usr/bin/perl $var = 10; $r = $var; print "r 的引用类型 : ", ref($r), "\n"; @var = (1, 2, 3); $r = \@var; print "r 的引用类型 : ", ref($r), "\n"; %var = ('key1' => 10, 'key2' => 20); $r = \%var; print "r 的引用类型 : ", ref($r), "\n";
Le résultat de l'exécution de l'exemple ci-dessus est :
r 的引用类型 : SCALAR r 的引用类型 : ARRAY r 的引用类型 : HASH
Référence circulaire
La référence circulaire se produit lorsque deux références incluent l'un l'autre. Vous devez l'utiliser avec précaution, sinon cela provoquera des fuites de mémoire, comme le montre l'exemple suivant :
#!/usr/bin/perl my $foo = 100; $foo = $foo; print "Value of foo is : ", $$foo, "\n";
Le résultat de l'exécution de l'exemple ci-dessus est :
Value of foo is : REF(0x9aae38)
Fonction de référence
Format de référence de fonction : &
Format de fonction de référence d'appel : & + Nom de référence créé.
L'exemple est le suivant :
#!/usr/bin/perl # 函数定义 sub PrintHash{ my (%hash) = @_; foreach $item (%hash){ print "元素 : $item\n"; } } %hash = ('name' => 'php', 'age' => 3); # 创建函数的引用 $cref = \&PrintHash; # 使用引用调用函数 &$cref(%hash);
Le résultat de l'exécution de l'exemple ci-dessus est :
元素 : age 元素 : 3 元素 : name 元素 : php