Ya tiene una buena respuesta, pero quizás esto sea útil también. La declaración our
combina aspectos de my
y use vars
. Funciona de manera similar a use vars
en que declara variables de paquete; sin embargo, las variables declaradas de esta forma tienen un alcance léxico y no se puede acceder fuera del ámbito en el que se declararon (a menos que use el nombre completo de la variable). Además, una variable declarada con our
es visible en todo su alcance léxico, , incluso a través de los límites del paquete.
Aquí hay una tabla que agregué a mis notas de Perl hace un tiempo. Para un ejemplo, vea this SO answer.
Scope/ Package
Namespace Variable Private New
---------------------------------------------------
my Lexical No Yes Yes
our Lexical Yes No No
use vars Package Yes No No
Gracias, ahora entiendo. –
Realmente es un alias, si solo fuera una excepción a 'strict', entonces' perl -le 'our $ foo = 42; paquete A; print "$ foo $ main :: foo" ' 42 42' imprimiría lo mismo que 'perl -le 'use vars qw/$ foo /; $ foo = 42; paquete A; imprime "$ foo $ main :: foo" '', que es una exención, y no necesitaríamos' our'. –
@Chas buen punto. – hobbs