overload example
package Number;
use overload
"+" => \&add,
q{""} => \&digit;
sub new {
my ( $class, $digit ) = @_;
#die unless $digit =~ /\d+/;
return bless { digit => $digit }, $class;
}
sub digit {
my ($self) = @_;
return $self->{'digit'};
}
sub add {
my ( $self, $number ) = @_;
if ( ref $number eq 'Number' and $number->can('digit') ) {
return Number->new( $self->digit + $number->digit );
}
elsif ( $number =~ /\d+/ ) {
return Number->new( $self->digit + $number );
}
else {
die('NaN');
}
}