Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

Ave!

I'm struggling with serializing and deserializing Dios/Object::InsideOut objects. So far as I can tell Dios makes use of Object::InsideOut and Object::InsideOut provides $object->dump() and Object::InsideOut->pump() for serialization/deserialization. On an object that does NOT contain another object I've been able to get it to work but when the object contains other objects as in the code below nothing I've tried works?

#!/usr/bin/env perl use Data::Dumper; use Data::Dx; use Dios { accessors => 'unified' }; use Getopt::Long; use Path::Tiny; use Test::Expr; use 5.014_00; class Nada { has Int $.number is rw; }; class Yada { has Int $.number is rw; has Nada @.nadas is rw; }; # class Yada: BEGIN { # Let's confirm that Dios uses Object::InsideOut so we can "dump" +and "pump" say $INC{'Object/InsideOut.pm'}; }; Getopt::Long::GetOptions( "initialize" => \my $initialize, "restore" => \my $restore, "save" => \my $save, ); say "<co de>"; Nada->new(), Yada->new(), say "initialized!" if ($initialize); sub test_our_yada { my $self=shift; ok $self->isa('Yada'); ok $self->number() == 0; ok @{$self->nadas()} == 2; Dx $self->nadas(); ok $self->nadas()->[0]->number() == 1; ok $self->nadas()->[1]->number() == 2; } if ($save) { # The "initial" Yada my $yada=Yada->new(number=>0,nadas=>[Nada->new(number=>1),Nada->ne +w(number=>2)]); $yada->main::test_our_yada(); # $erialized and written to 'Yada.dat' Path::Tiny::path('Yada.dat')->spew_raw($yada->dump(1)); done_testing; } elsif ($restore) { # The restored from 'Yada.dat' Yada my $yada=Object::InsideOut->pump(Path::Tiny::path('Yada.dat')->slu +rp_raw()); $yada->main::test_our_yada(); done_testing; } else { warn "Needs a 'save' or a 'restore'."; } say "</co de>"; __END__
My results can be seen
# Saved WITHOUT initial "Nada->new(), Yada->new()" >perl test_01.t -save ok 1 - $self->isa('Yada') ok 2 - $self->number() == 0 ok 3 - @{$self->nadas()} == 2 #line 38 test_01.t $self->nadas() = [ bless(do{\(my $o = 1)}, "Nada"), bless(do{\(my $o = 2)}, "Nada"), ] ok 4 - $self->nadas()->[0]->number() == 1 ok 5 - $self->nadas()->[1]->number() == 2 1..5 # Restored WITHOUT initial "Nada->new(), Yada->new()" >perl test_01.t -restore OIO::Args error: Unknown field name for class 'Yada': number Package: main File: test_01.t Line: 52 Trace begun at test_01.t line 52 # Restored WITH initial "Nada->new(), Yada->new()" >perl test_01.t -initialize -restore initialized! ok 1 - $self->isa('Yada') ok 2 - $self->number() == 0 ok 3 - @{$self->nadas()} == 2 #line 38 test_01.t $self->nadas() = [ bless(do{\(my $o = 1)}, "Nada"), bless(do{\(my $o = 2)}, "Nada"), ] not ok 4 - $self->nadas()->[0]->number() == 1 # Failed test '$self->nadas()->[0]->number() == 1' # at test_01.t line 45. # # (do{$self->nadas()->[0]->number() == 1}) was false # because: # $self --> bless(do{\(my $o = 1)}, "Yada") # not ok 5 - $self->nadas()->[1]->number() == 2 # Failed test '$self->nadas()->[1]->number() == 2' # at test_01.t line 46. # # (do{$self->nadas()->[1]->number() == 2}) was false # because: # $self --> bless(do{\(my $o = 1)}, "Yada") # 1..5 ERROR: Duplicate reclaimed object ID (1) in class tree for Nada in thr +ead 0 # Looks like you failed 2 tests of 5. # Saved WITH initial "Nada->new(), Yada->new()" >perl test_01.t -initialize -save initialized! ok 1 - $self->isa('Yada') ok 2 - $self->number() == 0 ok 3 - @{$self->nadas()} == 2 #line 38 test_01.t $self->nadas() = [ bless(do{\(my $o = 1)}, "Nada"), bless(do{\(my $o = 2)}, "Nada"), ] ok 4 - $self->nadas()->[0]->number() == 1 ok 5 - $self->nadas()->[1]->number() == 2 1..5 # Restored WITHOUT initial "Nada->new(), Yada->new()" >perl test_01.t -restore OIO::Args error: Unknown field name for class 'Yada': number Package: main File: test_01.t Line: 52 Trace begun at test_01.t line 52 # Restored WITH initial "Nada->new(), Yada->new()" >perl test_01.t -initialize -restore initialized! ok 1 - $self->isa('Yada') ok 2 - $self->number() == 0 ok 3 - @{$self->nadas()} == 2 #line 38 test_01.t $self->nadas() = [ bless(do{\(my $o = 1)}, "Nada"), bless(do{\(my $o = 2)}, "Nada"), ] not ok 4 - $self->nadas()->[0]->number() == 1 # Failed test '$self->nadas()->[0]->number() == 1' # at test_01.t line 45. # # (do{$self->nadas()->[0]->number() == 1}) was false # because: # $self --> bless(do{\(my $o = 1)}, "Yada") # not ok 5 - $self->nadas()->[1]->number() == 2 # Failed test '$self->nadas()->[1]->number() == 2' # at test_01.t line 46. # # (do{$self->nadas()->[1]->number() == 2}) was false # because: # $self --> bless(do{\(my $o = 1)}, "Yada") # 1..5 ERROR: Duplicate reclaimed object ID (1) in class tree for Nada in thr +ead 0 # Looks like you failed 2 tests of 5.

What am I doing wrong - and how do I fix it?


In reply to How to serialize and deserialize Dios/Object::InsideOut objects? by clueless newbie

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (6)
As of 2024-04-12 15:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found