> >> 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]

Reply via email to