Re: strictness and fully qualified global vars
On Tue, Dec 28, 2004 at 10:31:37PM -0800, Ashley Winters wrote: : On Tue, 28 Dec 2004 22:31:47 -0700, Luke Palmer <[EMAIL PROTECTED]> wrote: : > Ashley Winters writes: : > > sub foo (Class $who) { : > > my $thing := $who<$var>; : > > my &func := $who<&func>; # how would I do this otherwise? : > > } : > : > In current Perl 6: : > : > sub foo (Class $who) { : > my $thing := $::($who)::var; : > my &func := &::($who)::func; : > } : : Okay, I see. S10 says ::() is the catch-all symbolic naming syntax. : However, $who would be a reference to a class object itself. Does it : automagically accept hard-references, or would Class objects have to : stringify to their global ::*::ClassName? : : More to the point, is %::(%foo) an identity op? We will probably make hard refs work inside ::() just to make it easier to translate Perl 5 to Perl 6. But possibly it should require a laxity pragma to enable it. If we end up with people simply writing $::($x) everywhere instead of ${$x}, we haven't gained anything over Perl 5, and we've lost strict refs. I don't want people to get in the habit of using ::() for hard refs unless they explicitly want symbolic refs as well. I was hoping that the mere length of $::() over ${} would be enough to discourage that kind of thinking, but now I'm not so sure. Larry
Re: strictness and fully qualified global vars
On Tue, 28 Dec 2004 22:31:47 -0700, Luke Palmer <[EMAIL PROTECTED]> wrote: > Ashley Winters writes: > > sub foo (Class $who) { > > my $thing := $who<$var>; > > my &func := $who<&func>; # how would I do this otherwise? > > } > > In current Perl 6: > > sub foo (Class $who) { > my $thing := $::($who)::var; > my &func := &::($who)::func; > } Okay, I see. S10 says ::() is the catch-all symbolic naming syntax. However, $who would be a reference to a class object itself. Does it automagically accept hard-references, or would Class objects have to stringify to their global ::*::ClassName? More to the point, is %::(%foo) an identity op? Ashley
Re: strictness and fully qualified global vars
Ashley Winters writes: > sub foo (Class $who) { > my $thing := $who<$var>; > my &func := $who<&func>; # how would I do this otherwise? > } In current Perl 6: sub foo (Class $who) { my $thing := $::($who)::var; my &func := &::($who)::func; } However, I agree that $Package::var is weird since the variable's name is $var, not just var. Package::$var looks really odd to me, but maybe it's the right thing to do. For interpolation, we could just force curlies; package variables aren't interpolated much anyway. Luke
Re: strictness and fully qualified global vars
On Wed, 29 Dec 2004 06:55:11 +0300, Alexey Trofimenko <[EMAIL PROTECTED]> wrote: > P.S. I have one (almost unrelated to topic) observation: if sigil is a > part of a variable name, then C< Package::$var > makes more sense than > perl5 C< $Package::var >. (AFAIK, PHP5 works this way) And this requires > less magic from perl. I agree... that's inconsistent. I have another question: Are package/class/grammar namespaces valid objects in Perl6? I would assume yes, so you can call methods on them for meta-purposes. Would there be a default Namespace::postcircumfix:«< >» operator, which would make the above code look like: Package<$var> aka Package.<$var>? This would continue to make sense even when the namespace objects are passed to a function: sub foo (Class $who) { my $thing := $who<$var>; my &func := $who<&func>; # how would I do this otherwise? } I assume the second line can't really be done through stringification due to singletons. Well, on second thought, you could make $foo.meta (or whatever) start answering to CLASS(0xDEADBEEF) style classnames. Those are probably needed for debugging or something anyways. Ashley Winters