#!/usr/bin/perl use strict; { package Address; use Moose; has street => (is => 'rw'); has city => (is => 'rw'); has state => (is => 'rw'); has zip => (is => 'rw'); sub dump { my $self = shift; print $self->street, "\n"; print $self->city, ", "; print $self->state, " "; print $self->zip, "\n"; } } { package Person; use Moose; has name => (is => 'rw'); has addresses => (is => 'rw', isa => 'ArrayRef', default => sub {[]}); } { package AddressBook; use Moose; has people => (is => 'rw', isa => 'ArrayRef[Person]', default => sub {[]}); sub dump { my $self = shift; foreach my $person (@{$self->people}) { print "Entry: " . $person->name . "\n"; foreach my $address (@{$person->addresses}) { $address->dump; } } } } use KiokuDB; use KiokuDB::Backend::JSPON; my $d = KiokuDB->new( backend => KiokuDB::Backend::JSPON->new( dir => "data", ), ); my $scope = $d->new_scope; # takes a snapshot of $some_object if(@ARGV) { my $a1 = Address->new( street => '2130 P Street', city => 'Washington', state => 'DC', zip => '20037', ); my $p1 = Person->new( name => 'Joe', addresses => [ $a1 ] ); my $addressbook = AddressBook->new( people => [ $p1 ] ); $d->store($addressbook); print "Stored!\n"; exit; } # print "UUID: $uuid\n"; my ($book) = $d->root_set->all; print "book:\n"; $book->dump;