Variables léxicas y typeglobs

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.

Es un error declarar una variable de tipo typeglob:

$ cat mytypeglob.pl
#!/usr/bin/perl  -w
use strict;

my *a;
my $b;

*a = *b;

$ ./mytypeglob.pl
syntax error at ./mytypeglob.pl line 4, near "my *a"
Execution of ./mytypeglob.pl aborted due to compilation errors.

Ejercicio 4.15.1   Explique el mensaje de advertencia en la compilación del siguiente programa:
lhp@nereida:~/Lperl/src$ cat -n mytypeglob2.pl
 1  #!/usr/bin/perl  -w
 2  use strict;
 3
 4  our $a;
 5  my $b;
 6
 7  *a = *b;
 8  $a = 4;
 9  print "$b\n";
lhp@nereida:~/Lperl/src$ perl -c mytypeglob2.pl
Name "main::b" used only once: possible typo at mytypeglob2.pl line 7.
mytypeglob2.pl syntax OK

Ejercicio 4.15.2   ¿Que se imprimirá al ejecutar el siguiente código?
$a = 3.14159;
my $a = 5;
*b = *a;
print $b;

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