2012-06-17 10 views
6

perl pregunta sobre la referencia.

$ref = [11, 22, 33, 44]; 
print "$$ref[0]" . "\n"; 
print "@$ref[0]" . "\n"; 

cuando ejecuto perl -d.

DB<1> p @$ref 
11223344 
DB<2> p $ref 
ARRAY(0x9dbf480) 
DB<3> p \$$ref[0] 
SCALAR(0x9dbf470) 
DB<4> p \@$ref[0] 
SCALAR(0x9dbf470) 

$$ ref [0] se encuentra el primer escalar de ARRAY (0x9dbf480).

¿Qué significa @ $ ref [0]? No puedo entender.

+5

Considere leer a través de ['perlol'] (http://perldoc.perl.org/perllol.html) y [' perldsc'] (http://perldoc.perl.org/perldsc.html). Ellos hacen un buen trabajo si explican esto. –

+1

La barra diagonal inversa es el operador de referencia, está llamando a \ $$ ref [0] y \ @ $ ref [0], está desreferenciando y luego pidiendo una referencia otra vez, seguramente no tiene la intención de hacer eso. –

Respuesta

10

$ref = [11, 22, 33, 44]; es una referencia a una matriz anónima.

$$ref[0] o ${$ref}[0] o $ref->[0] está desreferenciando la matriz y recuperando el primer elemento.

@$ref[0] o @{$ref}[0] está desreferenciando la matriz y obteniendo una porción de matriz que contiene solo el primer elemento.

4

Primero, @$ref[0] es diferente de \@$ref[0]. Usted tiene el primero en su sesión de depuración, y el último en su secuencia de comandos.

De todos modos, @$ref[0] significa lo mismo que @{$ref}[0]. Si tuviera una matriz llamada @ref, @ref[0] sería el equivalente. Está utilizando la notación de sectores para obtener el primer elemento de la matriz.

La diferencia entre @array[$x] y $array[$x] es que en la primera se puede especificar más de un índice y obtener una colección de elementos del conjunto, en lugar de solo uno. Pero si solo coloca un índice entre los corchetes, obtendrá el mismo resultado.