Data::MultiValued::UglySerializationHelperRole - only use this if you know what you're doing
version 0.0.1_4
package My::Class; use Moose; use Data::MultiValued::AttributeTrait::Tags; with 'Data::MultiValued::UglySerializationHelperRole'; has tt => ( is => 'rw', isa => 'Int', traits => ['MultiValued::Tags'], default => 3, predicate => 'has_tt', clearer => 'clear_tt', );
Later:
my $json = JSON::XS->new->utf8; my $obj = My::Class->new(rr=>'foo'); my $str = $json->encode($obj->as_hash); my $obj2 = My::Class->new_in_place($json->decode($str)); # $obj and $obj2 have the same contents
This is an ugly hack. It pokes inside the internals of your objects, and will break if you're not careful. It assumes that your instances are hashref-based. It mostly assumes that you're not storing blessed refs inside the multi-value attributes. It goes to these lengths to give a decent serialisation performance, without lots of unnecessary copies. Oh, and on de-serialise it will skip all type constraint checking and bypass the accessors, so it may well give you an unusable object.
new_in_place
my $obj = My::Class->new_in_place($hashref);
Directly blesses the hashref into the class, then calls _rebless_slot on any multi-value attribute.
bless
_rebless_slot
This is very dangerous, don't try this at home without the supervision of an adult.
as_hash
my $hashref = $obj->as_hash;
Performs a shallow copy of the object's hash, then replaces the values of all the multi-value slots with the results of calling _as_hash on the corresponding multi-value attribute.
_as_hash
my $obj_clone = My::Class->new_in_place($obj->as_hash);
This will create a shallow clone. Most internals will be shared. Things may break. Just don't do it, dclone the hashref, or do something equivalent (as in the synopsis), instead.
dclone
Gianni Ceccarelli <dakkar@thenautilus.net>
This software is copyright (c) 2011 by Net-a-Porter.com.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Data::MultiValued, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Data::MultiValued
CPAN shell
perl -MCPAN -e shell install Data::MultiValued
For more information on module installation, please visit the detailed CPAN module installation guide.