*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 5Asi, 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()