Asignaciones, Trozos y Contextos

¿Que efecto tiene el siguiente código?:

@text = (1, 2, 3, 4, 5);
@text[@text] = 0;
¿En que contexto se interpreta el array @text que aparece dentro del corchete? ¿Escalar o lista?

Respuesta:

El array text entre corchetes es interpretado en un contexto de lista, pues no dice $text[@text], dice @text[@text]. El resultado es un trozo con 5 elementos. Por tanto dice: @text[(1, 2, 3, 4, 5)] = 0. Asi pues, text[0] permanece no modificado y es 1, text[1] es igualado a 0 y los restantes miembros quedan undef ya que la parte derecha es una lista que contiene un sólo elemento.

lhp@nereida:~/Lperl/src$ perl -wde 0
main::(-e:1):   0
  DB<1> @text = (1, 2, 3, 4, 5)
  DB<2> @text[@text] = 0
  DB<3> x @text
0  1
1  0
2  undef
3  undef
4  undef
5  undef
  DB<4> @text = (1, 2, 3, 4, 5)
  DB<5> $text[@text] = 0
  DB<6> x @text
0  1
1  2
2  3
3  4
4  5
5  0

Casiano Rodríguez León
2011-04-15