in reply to Re^4: Overloading without infinite descent
in thread Overloading without infinite descent (fixed by time: see Perl 5.10.1)
BEGIN { package Before; my (%looper); use overload '&{}' => sub { my ($f) = @_; print "Stuff before \n"; return $looper{ overload::StrVal($f) }; }; sub new { my ( $package, $sub ) = @_; my $self = bless sub { }, $package; my $fs = overload::StrVal($self); $looper{$fs} = $sub; use Scalar::Util(); Scalar::Util::weaken( $looper{$fs} ); return $self; } } package main; { my $fx = sub { print "I am a side effect\n" }; my $now = Before->new($fx); $now->(); warn "fx => $fx "; warn "now => ", overload::StrVal $now ; bless $fx, 'Before'; warn "fx => ", overload::StrVal $fx; $fx->(); } __END__ Stuff before I am a side effect fx => CODE(0x18513ac) at - line 27. now => Before=CODE(0x18304d0) at - line 28. fx => Before=CODE(0x18513ac) at - line 30. Stuff before Overloaded dereference did not return a reference at - line 31.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: Overloading without infinite descent
by JadeNB (Chaplain) on Aug 03, 2009 at 07:41 UTC | |
by Anonymous Monk on Aug 03, 2009 at 07:50 UTC | |
by JadeNB (Chaplain) on Aug 03, 2009 at 07:56 UTC | |
by Anonymous Monk on Aug 03, 2009 at 07:48 UTC |