Latest web development tutorials

referencias Perl

La referencia es un puntero, referencia Perl es un tipo escalar puede apuntar a las variables, matrices, tablas hash (también llamado matrices asociativas) o subprograma se puede utilizar en cualquier parte del programa.


crear referencias

variables definidas, el nombre de variable precedido de una \, obtenemos una referencia a la variable, como por ejemplo:

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

En la matriz, podemos usar una referencia a un array anónimo, utilice [] Definición:

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

elementos de la matriz anónimos todavía puede ser anónima matriz, por lo que podemos utilizar este método para construir una matriz de matrices, la matriz se puede construir de cualquier dimensión.

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

Podemos utilizar un hash de hash referencias anónimas, utilizar {} definición:

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

No podemos crear un nombre de subprograma referencia subrutina anónima:

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

Desreferencia

Cancelar aplicación se puede utilizar dependiendo del tipo de $, @ o%, de cancelar, ejemplos son los siguientes:

#!/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";

Aplicación del ejemplo anterior, el resultado es:

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

Si no puede determinar el tipo de variable, puede usar elárbitro para determinar el valor de retorno que aparece a continuación, el siguiente valor se devuelve si no hay ninguna falsa:

SCALAR
ARRAY
HASH
CODE
GLOB
REF

Ejemplos son los siguientes:

#!/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";

Aplicación del ejemplo anterior, el resultado es:

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

Las referencias circulares

Las referencias circulares citadas en dos emergencia incluyen mutuamente. Usted necesita tener cuidado de usar, de lo contrario, dará lugar a pérdidas de memoria, los siguientes ejemplos:

#!/usr/bin/perl

my $foo = 100;
$foo = \$foo;

print "Value of foo is : ", $$foo, "\n";

Aplicación del ejemplo anterior, el resultado es:

Value of foo is : REF(0x9aae38)

Funciones de referencia

Función de formato de referencia: \ &

formato de llamada de función de referencia: & + nombre de referencia creado.

Ejemplos son los siguientes:

#!/usr/bin/perl

# 函数定义
sub PrintHash{
   my (%hash) = @_;
   
   foreach $item (%hash){
      print "元素 : $item\n";
   }
}
%hash = ('name' => 'w3big', 'age' => 3);

# 创建函数的引用
$cref = \&PrintHash;

# 使用引用调用函数
&$cref(%hash);

Aplicación del ejemplo anterior, el resultado es:

元素 : age
元素 : 3
元素 : name
元素 : w3big