From: Dan Sugalski [mailto:[EMAIL PROTECTED]]
> 
> No, you attach the magic to a value. Perl just doesn't copy 
> magic when it copies data. Whether this is a good thing or
> not is up in the air. (Half the time I want it to, the other
> half I don't...)

Is there a good discussion of magic, copying magic etc. in the core perl
documentation? Or elsewhere for that matter? Any documentation, pointers,
general tips, etc. would be greatly appreciated.

I was recently bit by overloading magic in the Class::Context generic
constructor which the following code illustrates. If you return "another"
reference to a scalar which was blessed, instead of the blessed reference,
then you loose your magic.  I'm trying to keep Class::Contract (which I'm
maintaining for Damian) overload friendly... But Perl magic on my map is
labelled "there be dragons". 

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";

Results In:
bar  bar=SCALAR(0x1bbfc9c)
baz  Hello World

Reply via email to