Typeglobs vistos como Hashes

Perl dispone de una sintáxis especial para acceder a un ''typeglob'' como si fuera un ''hash'' indexado en el tipo de variable. Las siguientes parejas de asignaciones son equivalentes:
$scalar_ref = *variable{SCALAR} # igual a $scalar_ref = \$variable
$array_ref  = *variable{ARRAY}  # igual a $scalar_ref = \@variable
$hash_ref   = *variable{HASH}   # igual a $scalar_ref = \%variable
$sub_ref    = *variable{CODE}   # igual a $scalar_ref = \&variable

Podemos usar esta sintáxis para acceder a la entrada de fichero del ''typeglob'':

$handle_ref = *variable{IO}
Veamos un ejemplo con el depurador:
  DB<1> $a = 4; @a = 1..5
  DB<2> $rsa = *a{SCALAR}
  DB<3> x $rsa
0  SCALAR(0x8450e04)
   -> 4
  DB<4> open a, "matrixP.pl"
  DB<5> $rfa = *a{IO}
  DB<6> x $rfa
0  IO::Handle=IO(0x847db4c)
  DB<7> $b = <$rfa>
  DB<8> p $b
#!/usr/bin/perl -w

Ejercicio 4.15.5   Dada la asignación:
$h = *$t{HASH};
¿Cuál es el tipo de $t? ¿Que queda en $h?

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