package MyPackage;
sub new {
my $self = $_[0];
bless { foo => $_[1] }, ref($self) || $self;
}
package main;
my $a = MyPackage::->new(1);
####
package main;
my $b = $a;
##
##
my $c = $a + $b;
##
##
package MyPackage;
use overload q/+/ => \&add;
sub add {
$_[0]->new( $_[0]->{foo} + (ref($_[1]) ? $_[1]->{foo} : $_[1]) )
}
##
##
package main;
my $c = $a + $b;
##
##
$b++;
##
##
package MyPackage;
use overload q/++/ => sub { $_[0]->{foo}*=2; shift };
package main;
$d = $c;
$d++;
##
##
package MyPackage;
use overload q/=/ => sub { $_[0]->new($_[0]->{foo}) };
##
##
package main;
$d = $c;
##
##
$d++;