main
pueden ser referidas prefijándolas con
::
; así el programa:
$ cat package_main.pl #!/usr/local/bin/perl5.8.0 -w $a = 4; package toto; $a = 8; $::a = 7; package main; print $a, "\n"; print $toto::a, "\n";produce como salida:
$ ./package_main.pl 7 8
Una excepción a esto la constituye las variables especiales
como $_
, @ARGV
, %ENV
, etc.
Estas pertenecen siempre al paquete main.
1 #!/usr/local/bin/perl5.8.0 -w 2 3 package toto; 4 $_ = 7; 5 package main; 6 print; 7 print "\n"; 8 $main::_ = 4; 9 print; 10 print "\n";Da como salida:
$ ./package_specialvars.pl 7 4
Las variables léxicas (declaradas con my
) no se introducen
en las tablas de símbolos de los paquetes. En estas sólo van las
variables globales. Cada bloque y subrutina tienen su propia
tabla de símbolos, que se denominan en la jerga Perl scratchpads.
A cada variable léxica se le asigna una ranura en el scratchpad.
Por supuesto, como las variables léxicas no van en las tablas de símbolos sino
en los scratchpads, no tiene sentido prefijarlas con un identificador de paquete.
lhp@nereida:~/Lperl/src$ cat -n privacy.pl 1 #!/usr/bin/perl -w 2 use strict; 3 package tutu; 4 my $a = 10; 5 6 package titi; 7 8 if (defined($tutu::a)) { print "$tutu::a\n" } 9 else { print "No esta definida \$tutu::a\n"}; 10 print "\$a = $a\n";