++ and -- are mutators - see perldoc overload. This is how to implement them:
package Number::Formatted;
use Number::Format;
my $format = new Number::Format (
thousands_sep => '.',
decimal_point => ',' );
use overload
'""' => sub { $format->format_number( ${$_[0]} ) },
'+' => sub {
my $num = ref( $_[1] ) ? ${$_[1]} : $_[1];
$num = ${$_[0]} + $num;
$num = - $num if $_[2];
return bless \$num, Number::Formatted;
},
'-' => sub {
my $num = ref( $_[1] ) ? ${$_[1]} : $_[1];
$num = ${$_[0]} - $num;
$num = - $num if $_[2];
return bless \$num, Number::Formatted;
},
'++' => sub { ++ ${$_[0]}; shift },
'--' => sub { -- ${$_[0]}; shift },
;
sub new {
my $num = $format->unformat_number( $_[1] );
return bless \$num, $_[0];
}
package main;
my $n = new Number::Formatted ( '1.234,56' );
my $m = new Number::Formatted ( '123,45' );
print $n, "\n";
print $n + 10, "\n";
print $n + $m, "\n";
print $n - $m, "\n";
print ++$n, "\n";
# 1.234,56
# 1.244,56
# 1.358,01
# 1.111,11
# 1.235,56