#!/usr/bin/perl -w { package NumberObject; use overload '""' => \&as_string, '0+' => \&as_number, '+' => \&add; sub new { my $class = shift; my $value = shift; bless \$value, $class; } sub as_string { return "" . ${+shift}; } sub as_number { return 0 + ${+shift}; } sub add { my $self = shift; return ref($self)->new($self->as_number + shift); } sub inc { my $self = shift; $$self += shift; } } $\ = "\n"; my $printnumber = new NumberObject(-1); print "initial value:"; print $printnumber; print "looping:"; for (1 .. 10) { inc $printnumber 1; print $printnumber; } print "overload magic (adding 5):"; $printnumber += 5; print $printnumber; print "still an object (adding 2):"; inc $printnumber 2; print $printnumber;