Visibilidad Léxica de our

Una declaración our $x hace que $x sea visible en el ámbito léxico. Por ejemplo el siguiente programa es considerado sintácticamente incorrecto:

nereida:/home/lhp/projects/perl/src# cat -n our2.pl
     1  #!/usr/bin/perl -w
     2  use strict;
     3
     4  sub tutu {
     5    $x = 5;
     6    print "$x\n";
     7  }
     8
     9  our $x = 4;
    10  tutu();
    11  print "$x\n";
Al compilar obtenemos errores que indican que $x no ha sido declarada antes del uso:
nereida:/home/lhp/projects/perl/src# perl -c our2.pl
Global symbol "$x" requires explicit package name at our2.pl line 5.
Global symbol "$x" requires explicit package name at our2.pl line 6.
Para convertirlo en un programa correcto debemos declarar $x antes de su uso, por ejemplo en la línea 3. Vamos, sin embargo, a hacer algo mas extraño:
nereida:/home/lhp/projects/perl/src# cat -n our.pl
     1  #!/usr/bin/perl -w
     2  use strict;
     3
     4  sub tutu {
     5    our $x = 5;
     6    print "$x\n";
     7  }
     8
     9  our $x = 4;
    10  tutu();
    11  print "$x\n";
Sólo hay una variable $x en el paquete actual. La declaración de la línea 5 ''hace visible'' $x en las líneas 5-7, pero es la misma variable que se declara en la línea 9. El programa produce la salida:
nereida:/home/lhp/projects/perl/src# our.pl
5
5

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