> "use vars" and "our" do roughly the same thing. They both > let you use package variables under strict without fully-qualifying. > > All these code snippets pass strict, and they each set the > package variable $foo ($A::foo, $B::foo, and $C::foo). > > use strict; > > { > package A; > use vars qw($foo); > $foo = 'A::foo'; > } > > { > package B; > our $foo; > $foo = 'B::foo'; > } > > { > package C; > $C::foo = 'C::foo'; # fully-qualifying > } > > The main practical difference is, like you said, that "our" > is new in 5.6. So if you want to support perl5.005_03 (which > is still in relatively wide use) you have to "use vars" instead. > > But "use vars" and "our" work differently, and there are some > subtle differences in their behavior. > > First of all, "use vars" does its magic by twiddling the > symbol table, marking the $foo variable as "imported". Since > the symbol table is global, you can use $foo any time you are > in the package that imported it -- even if you're in a > different block or file. > > package A; > use strict; > > { use vars qw($foo) } > $foo = 'A::foo'; # different block; no problem > > And for the same reason, a "use vars" declaration doesn't > extend across two packages in the same block or file. > > package A; > use strict; > > use vars qw($foo); > > package B; > $foo = 'B::foo'; # different package: ERROR > > On the other hand, "our" does its magic by creating a lexical > symbol (like a "my" variable) that is aliased to the package > variable of the same name. Since lexical symbols are only > visible in the scope (block, file, or eval) where they were > declared, the "our" declaration doesn't exist outside this block. > > package A; > use strict; > > { our $foo; } > $foo = 'A::foo'; # different lexical scope: ERROR > > And when you have several packages in the same lexical scope, > the "our" declaration extends across them. > > package A; > use strict; > > our $foo; # alias to $A::foo > > package B; > $foo = 'A::foo'; # STILL refers to $A::foo > > --
Thanks Steve, Very imformative and helpful! I'll read over hwta you and Rob said and let it soak in and go from there! Thanks again, Dan > Steve > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]