Barely Used Perl Untapped resources of the perl core libraries #8

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');
    }
}
Copyright © 2007 Robert Boone