I've spent some of the afternoon wading through A12 and S10 trying to
thoroughly understand scope in perl 6, in light of the death of use vars
and the addition of class (as well as package & module) namespaces.
In the process I came up against some confusion concerning how the default
package namespace should work. Currently, pugs does:
% pugs -e '$main::foo="foo"; say $foo'
which contradicts S10, which states:
The "::*" namespace is not "main". The default namespace for the main
program is "::*Main".
This turned out to be an oversight - but there was then confusion as to
how one actually refers to variables in the "::*Main" namespace, as if
$Foo::bar looks up the ::Foo object and fetches $bar from it, then
presumably $*Main::foo should look up the ::*Main object, and fetch $foo
However (from #perl6):
<autrijus> Arathorn: when you see $Foo::bar, it means looking up the ::Foo
object, then fetch $bar from it
<autrijus> and ::Foo, just like %Foo, can be lexical or package scoped or
<autrijus> to restrict the lookup to ::*Foo you can't use the ordinary
qualifying syntax, I think.
<autrijus> but I may be completely wrong
<Arathorn> so it sounds as if to get the variable $bar from the global
packagename ::*Foo (or just *Foo if disambiguation is not necessary),
you'd use $*Foo::bar then.
<autrijus> that may be the case, yes.
<autrijus> $?Foo::bar means $?bar in Foo::
<autrijus> but $*Foo::bar can't mean $*bar in Foo::
<autrijus> because Foo:: will never contain a $*bar.
<autrijus> so it must mean $bar in *Foo::
<autrijus> this is very weird.
So the question is: what is the correct syntax for referring to package
variables in the default namespace?
Also, what is the correct syntax for referring to package variables in
your 'current' namespace? $::foo? $?PACKAGENAME::foo?
Matthew Hodgson [EMAIL PROTECTED] Tel: +44 7968 722968
Arathorn: Co-Sysadmin, TheOneRing.net®