Array-To-Moose
view release on metacpan or search on metacpan
lib/Array/To/Moose.pm view on Meta::CPAN
has 'make' => (is => 'ro', isa => 'Str');
has 'model' => (is => 'ro', isa => 'Str');
has 'year' => (is => 'ro', isa => 'Int');
package CarOwner;
use Moose;
has 'last' => (is => 'ro', isa => 'Str');
has 'first' => (is => 'ro', isa => 'Str');
has 'Cars' => (is => 'ro', isa => ArrayRef[Car]');
...
# in package main:
use Array::To::Moose;
# In this dataset Alex owns two cars, Jim one, and Alice three
my $data = [
[ qw( Green Alex Ford Focus 2011 ) ],
lib/Array/To/Moose.pm view on Meta::CPAN
print $CarOwnersH->{Alex}->Cars->[0]->make; # prints "Ford"
Similarly, to construct the C<Cars> sub-objects as I<hash> sub-objects
(and not an I<array> as above), define C<CarOwner> as:
package CarOwner;
use Moose;
has 'last' => (is => 'ro', isa => 'Str' );
has 'first' => (is => 'ro', isa => 'Str' );
has 'Cars' => (is => 'ro', isa => 'HashRef[Car]'); # Was 'ArrayRef[Car]'
and noting that the car C<make> is unique for each person in the C<$data> dataset, we
construct the reference to an array of objects with the call:
$CarOwners = array_to_moose(
data => $data,
desc => {
class => 'CarOwner',
last => 0,
first => 1,
lib/Array/To/Moose.pm view on Meta::CPAN
If, instead of the car owner object containing an ArrayRef or HashRef of
C<Car> sub-objects, it contains, say, a ArrayRef of strings representing the
names of the car makers:
package SimpleCarOwner;
use Moose;
has 'last' => (is => 'ro', isa => 'Str' );
has 'first' => (is => 'ro', isa => 'Str' );
has 'CarMakers' => (is => 'ro', isa => 'ArrayRef[Str]');
Using the same dataset from Example 1a, we construct an arrayref
C<SimpleCarOwner> objects as:
$SimpleCarOwners = array_to_moose(
data => $data,
desc => {
class => 'SimpleCarOwner',
last => 0,
first => 1,
__PACKAGE__->meta->make_immutable;
#----------------------------------------
package Person_w_Aliases;
use namespace::autoclean;
use Moose;
use MooseX::StrictConstructor;
extends 'Person';
has 'aliases' => (is => 'ro', isa => 'ArrayRef[Str]');
__PACKAGE__->meta->make_immutable;
#----------------------------------------
package Person_w_Visit;
use namespace::autoclean;
use Moose;
use MooseX::StrictConstructor;
extends 'Person';
has 'Visits' => (is => 'ro', isa => 'ArrayRef[Visit]');
__PACKAGE__->meta->make_immutable;
#----------------------------------------
package Person_w_Aliases_n_Visit;
use namespace::autoclean;
use Moose;
use MooseX::StrictConstructor;
extends 'Person_w_Visit';
has 'aliases' => (is => 'ro', isa => 'ArrayRef[Str]');
__PACKAGE__->meta->make_immutable;
package main;
my ($class, $attrib, $rattrib, $sub_obj_desc);
#
# call errors
#
use MooseX::StrictConstructor;
has date => (is => 'ro', isa => 'Str');
has doctor => (is => 'ro', isa => 'Str');
has diagnosis => (is => 'ro', isa => 'Str');
package Patient;
use Moose;
use MooseX::StrictConstructor;
has last => (is => 'ro', isa => 'Str');
has first => (is => 'ro', isa => 'Str');
has Visits => (is => 'ro', isa => 'ArrayRef[Visit]');
no Moose;
package main;
sub Npat { Patient->new(last => $_[0], first => $_[1], Visits => $_[2] ) }
sub Nvis { Visit->new(date => $_[0], doctor => $_[1], diagnosis => $_[2] ) }
# patients
my @p1 = ( "Smith", "John" );
use MooseX::StrictConstructor;
has date => (is => 'ro', isa => 'Str');
has doctor => (is => 'ro', isa => 'Str');
has diagnosis => (is => 'ro', isa => 'Str');
package Patient;
use Moose;
use MooseX::StrictConstructor;
has last => (is => 'ro', isa => 'Str');
has first => (is => 'ro', isa => 'Str');
has Visits => (is => 'ro', isa => 'HashRef[Visit]');
no Moose;
package main;
sub Npat { Patient->new(last => $_[0], first => $_[1], Visits => $_[2] ) }
sub NvisH {
$_[0] => Visit->new(date => $_[0], doctor => $_[1], diagnosis => $_[2] ) }
# patients
has date => (is => 'ro', isa => 'Str');
has doctor => (is => 'ro', isa => 'Str');
has diagnosis => (is => 'ro', isa => 'Str');
package Patient;
use Moose;
use MooseX::StrictConstructor;
has last => (is => 'ro', isa => 'Str');
has first => (is => 'ro', isa => 'Str');
has FirstVisit => (is => 'ro', isa => 'Visit');
has Visits => (is => 'ro', isa => 'ArrayRef[Visit]');
has HVisits => (is => 'ro', isa => 'HashRef[Visit]');
no Moose;
package main;
sub Npat { Patient->new(last => $_[0], first => $_[1], FirstVisit => $_[2],
Visits => $_[3], HVisits => $_[4] ) }
sub Nvis { Visit->new(date => $_[0], doctor => $_[1], diagnosis => $_[2] ) }
sub NvisH {
$_[0] => Visit->new(date => $_[0], doctor => $_[1], diagnosis => $_[2] )
use Data::Dumper;
use Carp;
package Person;
use Moose;
use namespace::autoclean;
use MooseX::StrictConstructor;
has last => (is => 'ro', isa => 'Str');
has first => (is => 'ro', isa => 'Str');
has hobbies => (is => 'ro', isa => 'ArrayRef[Str]');
__PACKAGE__->meta->make_immutable;
package main;
sub Npat { Person->new(last => $_[0], first => $_[1], hobbies => $_[2] ) }
# person
my @p1 = ( "Smith", "John" );
my @p2 = ( "Smith", "Alex" );
has date => (is => 'ro', isa => 'Str');
has doctor => (is => 'ro', isa => 'Str');
has diagnosis => (is => 'ro', isa => 'Str');
package Patient;
use Moose;
use MooseX::StrictConstructor;
has last => (is => 'ro', isa => 'Str' );
has first => (is => 'ro', isa => 'Str' );
has FirstVisit => (is => 'ro', isa => 'Visit' );
has Visits => (is => 'ro', isa => 'ArrayRef[Visit]');
has HVisits => (is => 'ro', isa => 'HashRef[Visit]' );
no Moose;
package main;
sub Npat { Patient->new(last => $_[0], first => $_[1], FirstVisit => $_[2],
Visits => $_[3], HVisits => $_[4] ) }
sub Nvis { Visit->new(date => $_[0], doctor => $_[1], diagnosis => $_[2] ) }
sub NvisH {
$_[0] => Visit->new(date => $_[0], doctor => $_[1], diagnosis => $_[2] )
use MooseX::StrictConstructor;
has date => (is => 'ro', isa => 'Str');
has doctor => (is => 'ro', isa => 'Str');
has diagnosis => (is => 'ro', isa => 'Str');
package Patient;
use Moose;
use MooseX::StrictConstructor;
has last => (is => 'ro', isa => 'Str' );
has first => (is => 'ro', isa => 'Str' );
has Visits => (is => 'ro', isa => 'HashRef[Visit]' );
no Moose;
package main;
sub Npat { Patient->new(last => $_[0], first => $_[1], Visits => $_[2] ) }
sub NvisH {
$_[0] => Visit->new(date => $_[0], doctor => $_[1], diagnosis => $_[2] )
}
( run in 0.641 second using v1.01-cache-2.11-cpan-5f2e87ce722 )