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