package IPC::Transit::Serialize; use strict;use warnings; use Data::Serializer::Raw; our $serializers = { 'Data::Dumper' => Data::Serializer::Raw->new( serializer => 'Data::Dumper', options => {}, ), }; sub freeze { my %args; { my @args = @_; die 'IPC::Transit::Serialize::freeze: even number of arguments required' if scalar @args % 2; %args = @args; } my $serialize_with = $args{serialize_with} || 'Data::Dumper'; if(not $serializers->{$serialize_with}) { $serializers->{$serialize_with} = Data::Serializer::Raw->new( serializer => $serialize_with ); } my $serialized_data = $serialize_with . '/' . $serializers->{$serialize_with}->serialize($args{message}); return $serialized_data; } sub thaw { my %args; { my @args = @_; die 'IPC::Transit::Serialize::thaw: even number of arguments required' if scalar @args % 2; %args = @args; } my ($serialize_with, $serialized_data) = split '\/', $args{serialized_data}; eval { $args{message} = $serializers->{$serialize_with}->deserialize($serialized_data); }; return $args{message}; } 1;