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'); } }