*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.
Del mismo modo
@args
es un sinónimo de @ARGV
pero no de $ARGV
y do_it
es el nombre
de una subrutina que inicialmente era anónima.
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
Veamos otro ejemplo:
lhp@nereida:~/Lperl/src$ perl -wde 0 main::(-e:1): 0 DB<1> %variable = (v => "ven", a => "a", r=> "rumania") DB<2> sub variable { print "esto es una variable" } DB<3> $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:
DB<4> x %{*$typeglob_ref} 0 'r' 1 'rumania' 2 'a' 3 'a' 4 'v' 5 'ven' DB<5> x &{*$typeglob_ref}() 0 1 DB<6> x *$typeglob_ref->() 0 1 DB<7> x *$typeglob_ref->{r} 0 'rumania'
"esto es una variable"
en las líneas 5,6 y 7? ¿Por que la respuesta es "1"
?
lhp@nereida:~/Lperl/src$ cat -n ./fileparameter2.pl 1 #!/usr/bin/perl -w 2 use strict; 3 4 sub welcome { 5 my $fh = shift; 6 7 print $fh "Welcome ...\n"; 8 } 9 10 open(FILE, ">test.txt"); 11 my $file = \*FILE; 12 welcome($file); 13 close($file); lhp@nereida:~/Lperl/src$ ./fileparameter2.pl lhp@nereida:~/Lperl/src$ cat test.txt Welcome ...
#!/usr/local/bin/perl5.8.0 -w sub mundo { "mundo\n" } *hola = \&mundo; $mundo = "hola"; $hola = "bienvenido"; print "$mundo ",&hola();