Skip to content

yappo/p5-Number-Object

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 <yappo {at} shibuya {dot} pl>

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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages