From: Branden [mailto:[EMAIL PROTECTED]]
>
> try to define a method in package bar and try to call it
> from $bar, like $bar->foo. Won't work either, you have
> to ${$bar}->foo. Overloading should loose the magic
> in the same sense that the method should not be called.
No, $bar->asString and $baz->asString both work. They produce:
Hello World
> > package bar;
> > @ISA = qw(foo);
> > sub new { bless \my $key; \$key }
>
> You return a reference to the object...
No, it returns an object reference... Try it.
> Try printing $$bar, it will work...
No, it doesn't. $$bar is an undefined scalar.
sub new { my $ref = \ my $key; bless $ref; $ref }
and
sub new { bless \ my $key; \$key; }
Both return an object reference. The former has magic, the latter does not.
I'm sorry... I didn't mean to start an off-topic thread. Unless someone can
find a way to shoe-horn in a discussion of language or internals magic
handling for Perl6? Is there really no substantial documentation anywhere
on magic? I suppose that is why it is called magic, eh?
package foo;
use overload '""' => 'asString';
sub asString { 'Hello World' }
package bar;
@ISA = qw(foo);
sub new { bless \my $key; \$key }
package baz;
@ISA = qw(foo);
sub new { my $ref = \ my $key; bless $ref; $ref }
package main;
my ($bar, $baz);
$bar = bar::->new();
$baz = baz::->new();
print "\$bar $bar\n";
print "\$baz $baz\n";
print "\$bar->asString ", $bar->asString, "\n";
print "\$baz->asString ", $baz->asString, "\n";
print "\$\$bar ", $$bar, "\n";
Results In:
$bar bar=SCALAR(0x1bbfc9c)
$baz Hello World
$bar->asString Hello World
$baz->asString Hello World
$$bar