Bienvenido a los foros de Perl en Español, DC_13.
Lo que primero vemos es
$xml->{alumno}.
Quiere decir que $xml contiene una referencia a un
hash. Y que una de las claves de ese
hash es 'alumno'. Entonces
$xml->{alumno} nos devuelve el valor asociado a esa clave.
Y ese valor, ¿qué es?
@{ ... } nos da la pista. Se trata de una desreferencia. Está explicado en perlreftut:
Using text Syntax Highlighting
Usando referencias
¿Qué puede hacer con una referencia una vez que la tiene? Es un valor escalar,
y hemos visto que puede almacenarse como un escalar y recuperarlo como cualquier
otro escalar. Hay otras dos formas de usarlas:
Regla de uso 1
Siempre puede usar una referencia de array, entre llaves, en lugar del nombre de
un array. Por ejemplo, @{$aref} en lugar de @array.
A continuación, algunos ejemplos de cómo usarlos:
Arrays:
@a @{$aref} Un array
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Así que...
$xml->{alumno} devuelve una referencia a un
array, y lo desreferenciamos con
@{ ... }. Así que lo que obtenemos es acceso directo al
array, que es justo lo que le pasamos a
push().
Lo que metemos en ese
array es... un
hash anónimo (por la presencia de las llaves). Es
hash tiene dos pares clave/valor. Y los valores son
arrays anónimos (por la presencia de los corchetes), que contienen un único elemento: el valor escalar extraído de una matriz bidimensional llamada @registro.
Entonces, la estructura que está construyendo es (de forma esquemática):
Using text Syntax Highlighting
$xml -> {
'alumno' => [
{ # $xml -> {'alumno'}[0]
nombre => [
$registro[$i][0], # $xml -> {'alumno'}[0]{'nombre'}[0]
..., # $xml -> {'alumno'}[0]{'nombre'}[1] ... {'alumno'}[0]{'nombre'}[N]
],
fecha => [
$registro[$i][1], # $xml -> {'alumno'}[0]{'fecha'}[0]
..., # $xml -> {'alumno'}[0]{'fecha'}[1] ... {'alumno'}[0]{'fecha'}[M]
],
},
..., # $xml -> {'alumno'}[1]
],
..., # otras claves
}
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Te aconsejo que mires
perlref y
perlreftut (con
perldoc, por ejemplo).