next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La notación flecha Sup: Referencias a variables ya Ant: Contextos y referencias Err: Si hallas una errata ...

Precedencias y prefijos

¿Como se debe interpretar la expresión $$a[1]? ¿Cómo ${$a[1]} o bien como ${$a}[1]?

La siguiente ejecución en el depurador nos muestra la respuesta:

  DB<1> $a = 4; $b = 5; $c = 6
  DB<2> @a = \($a, $b, $c)
  DB<3> $a = \@a
  DB<4> p $$a[1]
SCALAR(0x81046f4)
  DB<5> p @a
SCALAR(0x81046d0)SCALAR(0x81046f4)SCALAR(0x81046ac)
  DB<6> p ${$a[1]}
5
  DB<7> p ${$a}[1]
SCALAR(0x81046f4)

Cuando Perl evalúa una expresión deja la evaluación de los índices y las claves para el final. El prefijo mas cercáno a la variable es el primero en evaluarse. Es decir, los prefijos se evalúan de derecha a izquierda.

Las llaves significan un bloque de código. Así pues en la expresión ${ ... }[1] la parte interna a las llaves es un bloque de código que debe, eso si, devolver una referencia a un array. Veamos un ejemplo:

sub t {
  return \$a;
}

$a = 10;
$b = ${t()};
print $b; # 10


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La notación flecha Sup: Referencias a variables ya Ant: Contextos y referencias Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21