Referencias en Perl
Una referencia es un puntero; una referencia en Perl es un tipo escalar que puede apuntar a variables, arrays, tablas hash (también llamadas arrays asociativos) e incluso subrutinas, y se puede aplicar en cualquier parte del programa.
Crear referencias
Al definir una variable, si antepones \ al nombre de la variable, obtienes una referencia a esa variable, por ejemplo:
$scalarref = \$foo; # 标量变量引用 $arrayref = \@ARGV; # 列表的引用 $hashref = \%ENV; # 哈希的引用 $coderef = \&handler; # 子过程引用 $globref = \*foo; # GLOB句柄引用
En los arrays podemos usar referencias a arrays anónimos, definidas con []:
$aref= [ 1,"foo",undef,13 ];
Los elementos de un array anónimo pueden ser a su vez arrays anónimos, por lo que con este método podemos construir arrays de arrays, y arrays de cualquier dimensión.
my $aref = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
En los hashes podemos usar referencias a hashes anónimos, definidas con {}:
$href= { APR =>4, AUG =>8 };
También podemos crear una referencia a una subrutina anónima sin nombre de subrutina:
$coderef = sub { print "Ejemplo!\n" };
Desreferenciar
Para desreferenciar se puede usar $, @ o % según el tipo, como en el siguiente ejemplo:
Ejemplo
El resultado de ejecutar el ejemplo anterior es:
10 为 : 10 1 2 3 为: 123 \%var 为 : key110key220
Si no puedes determinar el tipo de variable, puedes usarrefpara determinarlo. La lista de valores devueltos es la siguiente; si no se encuentra entre los siguientes valores, devuelve false:
SCALAR ARRAY HASH CODE GLOB REF
El ejemplo es el siguiente:
Ejemplo
El resultado de ejecutar el ejemplo anterior es:
r 的引用类型 : SCALAR r 的引用类型 : ARRAY r 的引用类型 : HASH
Referencias circulares
Las referencias circulares aparecen cuando dos referencias se contienen mutuamente. Debes usarlas con cuidado, de lo contrario pueden causar fugas de memoria, como en el siguiente ejemplo:
Ejemplo
El resultado de ejecutar el ejemplo anterior es:
Value of foo is : REF(0x9aae38)
Referencias a funciones
Formato de referencia a función: \&
Formato para llamar a una referencia de función: & + nombre de la referencia creada.
Ejemplo:
Ejemplo
El resultado de ejecutar el ejemplo anterior es:
元素 : age 元素 : 3 元素 : name 元素 : ejemploOtras extensiones