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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19