Eso requiere una explicación:
@$registro[0], en realidad, es
@{$registro}[0].
Es decir:
$registro contiene una referencia a un arreglo anónimo. Con
@{} conseguimos acceder a ese arreglo. Y finalmente, con
[0] accedemos al primer elemento.
Pero, atención: estamos haciendo algo "no normal". Resulta que por efecto del '@',
@$registro es TODO el arreglo (todos los valores). Luego solo nos quedamos con uno (el [0]). Pero lo estamos repitiendo 3 veces. No es eficiente. Es legal, pero no es del todo 'correcto'.
Es lo mismo que si tuviéramos
Using perl Syntax Highlighting
my @arreglo = 1
.. 10;
print "@arreglo[3]\n";Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Sí, estamos imprimiendo el cuarto elemento, pero en realidad, lo que hacemos es sacar una lista de valores compuestos de un solo elemento, que es el cuarto de @arreglo. Vamos, es dar una vuelta a la manzana más. Lo lógico sería
print "$arreglo[3]\n";.
Así que en el caso de referencias, lo ideal sería seleccionar solo el elemento que nos interesa dentro del arreglo:
$registro->[0], que es lo mismo que escribir
${$registro}[0] que es lo mismo que escribir
$$registro[0] (es siempre preferible la notación con '->': es más cómoda y visual, y recuerda a la de otros lenguajes).
En este caso, Perl desreferencia el contenido de $registro, y sabe que es un elemento de un arreglo por la presencia de los corchetes del índice. Y solo devuelve ese elemento, a diferencia de la '@'.