The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use warnings;
use strict;
use Attribute::Overload;
use Test::More tests => 3;

package MyOverload;

sub new {
    my ($class, $value) = @_;
    bless \$value => $class;
}

sub add : Overload(+) {
    my ($self, $value) = @_;
    $$self += 2 * $value;
    return $self;
}

sub cmpnum : Overload(==) {
    my $self = shift;
    $$self;
}

# double each digit
sub to_print : Overload("") {
    join '' => map { "$_$_" } split // => ${ $_[0] };
}

package main;
my $o = MyOverload->new(57);
ok($o == 57, 'passing value to constructor');
$o += 23;    # adds 46 to give 103
ok($o == 103, 'after addition');

# stringify prints each digit twice, i.e. '110033'
ok("$o" eq '110033', 'stringification');