|Pathologically Eclectic Rubbish Lister|
Re: Our, use vars, and magic, oh my!by chipmunk (Parson)
|on Aug 23, 2001 at 21:20 UTC||Need Help??|
There are basically two kinds of variables in Perl.
Here's an example with use vars. Note that, although the use vars is within a block, it takes effect for the whole file. However, after the switch to package main, $var refers to $main::var.
Here's an example with my. Note that only within the lexical block can you access the $var that holds the number 7.
Here's an example with our. Note the behavior outside the block before the switch to main; $var refers to the $Pkg::var package variable, but without the package qualifier it would be an error with use strict.
Here's another example with our. Note that, after the switch to package main, $var still refers to $Pkg::var, because we're still in the same lexical scope.
So, both use vars and our declare a variable in the current package. The difference between them is in how you can access the variable. With either one, you can always use $Pkg::var from anywhere. With use vars, you can use $var anywhere in the file, as long as you're in the right package. With our and use strict, you can only use $var within the lexical scope, but you can still use $var after switching packages.
Finally, to answer your question about which of three declarations to use at the top of a script. If you're only accessing the variables from that file, you can use my. If you don't switch to a different package later on in the file, use vars and our are equivalent. If you do switch packages, our could result in surprising behavior, as in the last example above.
Update: echo pointed out a few places where I had written $variable instead of $var.