Object::Simple - Generate Mojo::Base compatible accessor
Use Object::Simple to create an accessor with a default value. Object::Simple is highly compatible with Mojolicious's Mojo::Base.
package Point; use Object::Simple -base; has x => 1; has y => 1; package main; my $point = Point->new; print $point->x; 1;
You can inherit Object::Simple by specifying -base when using. Object::Simple has a new method. It also imports a method called has for defining accessors. Also, strict and warnings are automatically enabled.
General class example
This is an example of a general class. The Point class has accessors x and y. It also has a method called clear that initializes x and y to 0.
package Point;
use Object::Simple -base;
has x => 0;
has y => 0;
sub clear {
my $self = shift;
$self->x(0);
$self->y(0);
}
1;
Use the Point class as follows: The constructor new is inherited from Object::Simple.
my $point = Point->new(x => 4, y => 6); $point->x(1); $point->y(2); my $x = $point->x; my $y = $point->y; $point->clear;
How to use Object::Simple
There are several ways to define attributes.
Define multiple attributes at once
# No default value has ['x', 'y']; # With default value has ['x', 'y'] => 0;
You can define multiple accessors at once by specifying the array reference as the first argument of has.
Specify default value
# Constant
has foo => 1;
# Array reference
has foo => sub {[]};
# Hash reference
has bar => sub {{}};
# object
has baz => sub {LWP::UserAgent->new};
When setting array reference, hash reference, objects, etc. to default values, you need to enclose them in sub {} for lazy evaluation.
Define all accessors at once
has [qw/foo bar baz /],
some => 1,
other => sub {5};
You can also define all accessors at once.
Inheritance example
This is an example to create a Point3D class that inherits the Point class.
package Point3D;
use Point -base;
has z => 0;
sub clear {
my $self = shift;
$self->SUPER::clear ();
$self->z(0);
}
1;
Constructor override
You can override the constructor new() for object initialization and argument processing.
# Override new() for object initialization
sub new {
my $self = shift->SUPER::new(@_);
# Initialization
return $self;
}
# Override new() for argument processing
sub new {
my $self = shift;
$self->SUPER::new(x => $_[0], y => $_[1]);
return $self;
}
Perl ABC