From: "Timothy Johnson" <[EMAIL PROTECTED]> > Another thing to remember is that declaring a variable with my() at > the top of your script does NOT make the variable global.
Right. > It loses > scope in subroutines. Wrong. If you declare a variable with my() its scope will be from the declaration to the end of the enclosing block. Which for variables declared outside any {} block or eval"" means ... to the end of the file. Including any subroutines. Unless of course there is another variable with the same name declared in a block. In that case this "global" variable is masked till the end of that block. > The easiest way to get around this is to pass > variables to your subs by reference. Variables are actually passed kind-of by reference. Try this: $x = 20; sub foo { print "foo called with param $_[0]\n"; $_[0] = 99; } print "\$x = $x\n"; foo($x); print "\$x = $x\n"; Or @a = (1,2,3); sub foo { print "foo called with param $_[0], $_[1], $_[2]\n"; $_[0] = 99; $_[1] = 99; $_[2] = 99; } print "\@a = @a\n"; foo(@a); print "\@a = @a\n"; It's when you do my $param = shift(); or my ($one,$two) = @_; when you are making copies. Jenda =========== [EMAIL PROTECTED] == http://Jenda.Krynicky.cz ========== There is a reason for living. There must be. I've seen it somewhere. It's just that in the mess on my table ... and in my brain I can't find it. --- me -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]