$printnumber += 1;
####
$printnumber++;
####
#!/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;