NAME Number::Object - pluggable number object SYNOPSIS use Number::Object; my $num = Number::Object->new(1000); print $num->filtered('comma');# 1,000 $num->value(20000); print $num;# 20000 $num->value(100); my $clone1 = $num->clone; my $clone2 = $num->clone(300); print "$num, $clone1, $clone2";# 100, 100, 300 using component and plugin use Number::Object; Number::Object->load_components(qw/ Autocall::Autoload /); Number::Object->load_plugins(qw/ Tax::JP /); my $num = Number::Object->new(10000); print $num->tax;# 500 print $num->include_tax;# 10500 print $num->include_tax->filtered('comma');# 10,500 using component and plugin # simple use Number::Object components => [qw/ Simple /], plugins => [qw/ Tax::JP /]; my $num = Number::Object->new(10000); print $num->tax;# 500 print $num->include_tax;# 10500 print $num->include_tax->filtered('comma');# 10,500 in your module package MyClass; use base 'Number::Object'; __PACKAGE__->load_components(qw/ Autocall::InjectMethod DisableDynamicPlugin /); __PACKAGE__->load_plugins(qw/ Tax /); package main; MyClass->load_plugins(qw/ ArithmeticOperation /); my $num = MyClass->new(10000); print $num->tax->mul(2);# 1000 DESCRIPTION Number::Object is pluggable number object. the method that want to be added to number can be added to pluggable. original number object can be made by succeeding to Number::Object. please refer to Class::Component for the method of making plugin and component. FILTER filter used by the filtered method can be added. please refer to mounting Number::Object::Filter::Comma . OVERLOAD when the arithmetic operation and comparing it, it is converted into an automatically usual numerical value. my $num = Number::Object->new(100); print (ref($num) || $num);# Number::Object my $cast = $num + 10; print (ref($cast) || $cast);# 110 but, the object is returned by the clone method as for same methods of the plugin. my $price = Number::Object->new(100, { load_plugins => [qw/ Tax /], config => { Tax => { rate => 1.5 } } }); print (ref($price) || $price);# Number::Object my $tax = $price->include_tax; print (ref($tax) || $tax);# Number::Object print $tax;# 150 with ++ and -- the operator cannot be used. my $counter = Number::Object->new(0); $counter++;# Died $counter--;# Died ++$counter;# Died --$counter;# Died former object disappears when operator such as += is used. my $assign = Number::Object->new(100); $assign += 100; print (ref($assign) || $assign);# 200 METHODS new clone value filtered HOOKS value.set AUTHOR Kazuhiro Osawa SEE ALSO Class::Component LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.