> >> there is no package variables in Perl, only global or lexical. > > > > Not so -- ALL package variables in Perl *are* global, but likewise > > all global variables in Perl are package vars. Even $_ is > > technically $main::_ so that > > > > $_ = 'foo'; > > package bob; > > print $main::_."\n"; > > > > prints "foo" and the newline. > > you are inventing the phrase "package variable" but i wont' argue > with.
Er? Sorry, I don't mean for this to sound as bad as it does, but.... have you read the docs that *come* with Perl???? > > What stack? Not the function call stack..... > > You mean there's a stack for symbol table entries? > > NOW we're getting somewhere! That makes sense, and I hope it's > > true. > > why are you keep bring on the topic of symbol table with local? what > makes you think symbol table has anything to do with the following > statement: > > my @x = (1..5); > { local $x[0] = -1; } Perhaps a mistaken assumption. Could someone delineate the difference between package variable value and the symbol table? I thought the symbol table was also use to store the actual values.... > your original question is "how can local localize $x[0] given that @x > isn't in the symbol table?" Yep, though I understand that it may be an invalid question. I'd still like to have it cleared up if it is. > i am telling you that you should forget about symbol table, package > vairable(which you invent because all Perl knows is global and lex. > variable), scretchpades and/or trying to show how how many ways(there > are virtually endless ways, i can tell you that much right now) you > can access a variable prefixing it with it's package name. Zillions, lol -- but please don't get testy. We all have things to learn -- such as what "package variable" means, for you, and how the symbol table relates, for me. > the reason why Perl can localize $x[0] even @x is a lexical variable > is becasue when Perl enters a block and sees the 'local $x[0]' > statement, it puts this tmp value in the stack (not the function > stack and there is no symbol stable entries stack), > it's a run time stack where Perl keeps track of all the local > variables. Mistermed, then. I'm ignorant here, and trying to cure that. Point me to the stack docs? > all statements inside this block, therefore, see the localized > version. But if you say: use strict; our $x = 1; { print $::x; my $x = 2; local $::x = 3; print $x,$main::x; } print $::x; you get 1231, because our $x is $main::x, which is a variable in the main:: package, but my $x is *not* in *any* package. My question is how those facts relate under aggregates like arrays, where local can address subelements, even though it can't localize the lexical itself. Try running this: my @x; local @x; It dies. So why can I do this? my @x; local $x[0]; Because that work. > when the block exit, the stack is destoried so the localized value > goes away and the original value is restored. Which doesn't explain why I can say my @x; local $x[0]; but not my @x; local @x; As mentioned before, though, this is rather technical for a beginner's list. I'm still willing to discuss it, but let's take it offline, shall we? :) Paul __________________________________________________ Do you Yahoo!? Yahoo! Shopping - Send Flowers for Valentine's Day http://shopping.yahoo.com -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]