next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Ejercicio: Asignaciones a Typeglobs Sup: Typeglobs Ant: Práctica: Includes C Err: Si hallas una errata ...


Typeglobs selectivos

Los ``typeglobs'' puede asignarse selectivamente a una referencia:
*SOURCE = \$SOURCE1;
*args = \@ARGV;
*do_it = sub { print "do it!\n" };
La primera asignación hace que $SOURCE sea un sinónimo de $SOURCE1, pero @SOURCE, %SOURCE y &SOURCE continúan con sus anteriores valores. Lo mismo se aplica a los otros dos ejemplos.

Es legal tomar una referencia a un ``typeglob''. Por ejemplo:

  DB<1> $a = 4; @a = 1..5
  DB<2> $b = \*a
  DB<3> x $b
0  GLOB(0x8450df8)
   -> *main::a
  DB<4> x ${*$b}
0  4
  DB<5> x @{*$b}
0  1
1  2
2  3
3  4
4  5
Asi, el código en la sección 5.14.5 puede ser reescrito:
#!/usr/bin/perl -w
...

open(FILE, ">test.txt");
@file = (1,2,3,4);
$file = \*FILE;
welcome($file);
print "@file\n";
close($file);
El resultado de la ejecución es:
$ filehandle2.pl
1 2 3 4
$ cat test.txt
Welcome ...

otro ejemplo:

$variable = 'esto es una $variable';
%variable = (v => "ven", a => "a", r=> "rumania");
sub variable { print "esto es una $variable" };

$typeglob_ref = \*variable;

Ahora typeglob_ref contiene una referencia a la entrada en la tabla de símbolos para variable. Podemos acceder a los elementos individuales a través de la referencia:

${*$typeglob_ref}; # sinónimo de $variable
%{*$typeglob_ref}; # sinónimo de %variable
&{*$typeglob_ref}(); # sinónimo de &variable()


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Ejercicio: Asignaciones a Typeglobs Sup: Typeglobs Ant: Práctica: Includes C Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21