Which recommended Perl modules can serialize Moose objects?

后端 未结 3 2074
广开言路
广开言路 2021-01-13 19:06

I was usually using Storable with nstore, but now I have a module that has CODE and apparently Storable doesn\'t like tha

相关标签:
3条回答
  • 2021-01-13 19:36

    You can dump a coderef with Data::Dumper after setting $Data::Dumper::Deparse to a true value, but this is only intended for debugging purposes, not for serialization.

    I would suggest you go back to looking at why MooseX::Storage isn't working out for you, as the authors tried really hard to present a well-abstracted and robust solution for Moose object serialization.


    Update: it looks like you are running into issues serializing the _offset_sub attribute, as described in this question. Since that attribute has a builder, and its construction is fairly trivial (it just looks at the current value of another attribute), you shouldn't need to serialize it at all -- when you deserialize your object and want to use it again, the builder will be invoked the first time you call $this->offset. Consequently, you should just be able to mark it as "do not serialize":

    use MooseX::Storage;
    
    has '_offset_sub' => (
        is       => 'ro',
        isa      => 'CodeRef',
        traits   => [ 'DoNotSerialize' ],
        lazy     => 1,
        builder  => '_build_offset_sub',
        init_arg => undef,
    );
    

    Lastly, this is somewhat orthogonal, but you can fold the offset and _offset_sub attributes together by using the native attribute 'Code' trait:

    has offset => (
        is          => 'bare',
        isa         => 'CodeRef',
        traits      => [ qw(Code DoNotSerialize) ],
        lazy        => 1,
        builder     => '_build_offset',
        init_arg    => undef,
        handles     => {
            offset  => 'execute_method',
        },
    );
    
    sub _build_offset {
        my ($self) = @_;
    
        # same as previous _build_offset_sub...
    }
    
    0 讨论(0)
  • 2021-01-13 19:56

    I believe Data::Dump::Streamer can serialize coderefs. Haven't used it myself though.

    0 讨论(0)
  • 2021-01-13 19:58

    Have a look at KiokuDB, its designed with and for Moose so it should really cover all the corners (NB. I haven't tried it myself but I keep meaning to!)

    /I3az/

    0 讨论(0)
提交回复
热议问题