Bob Showalter wrote: > Paul Kraus wrote: >> Maybe I am misunderstanding but that seems to be the exact same thing >> my does. > > No. my() creates a new variable. our() refers to a global variable.
not sure what you mean by that. 'our' does create new variable if that variable does NOT already exists in the current package's symble table. otherwise, it shadows it. 'my' creates a new variable but only in the local lex. scope. the largest lex. scope in Perl is file which means all variable tagged with 'my' can never be visialbe outside of its current package because 'my' does not put any variable in the current package's symble table. the following shows just that: [panda@dzhuo]$ perl my $a_variable = 1234; /a_variable/ and print "$_\n" for(keys %::); ^D [panda@dzhuo]$ print nothing because $a_variable is not in the package's symble table the following, however, does find the variable: [panda@dzhuo]$ perl our $a_variable = 1234; /a_variable/ and print "$_\n" for(keys %::); ^D a_variable [panda@dzhuo]$ because 'our' creates (if it doesn't already exists) and puts it in the package's symble table. > > Try this: > > use strict; > print "Global \$main::foo is at ", \$main::foo, "\n"; > our $foo = 'One'; the above does create a new variable. > print "a: addr=", \$foo, ", val=$foo\n"; > { > our $foo = 'Two'; the 'our' keyword here has no effect. $foo already exists so it simply shadows the outsider scope. it's the same as "$foo = 'Two'". Because 'our' doesn't create a new variable (because it already exists), nothing is destoried after the block exit so the value 'Two' is retain even after the block. this is another difference between 'our' and 'local' because 'local' never creates new variable but does make local copy of the variable so the old value can be retained after the block exit. david -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]