cvsuser     04/02/27 08:19:41

  Added:       App-Context/lib/App/Serializer Perl.pm
  Log:
  new
  
  Revision  Changes    Path
  1.1                  p5ee/App-Context/lib/App/Serializer/Perl.pm
  
  Index: Perl.pm
  ===================================================================
  
  #############################################################################
  ## $Id: Perl.pm,v 1.1 2004/02/27 16:19:41 spadkins Exp $
  #############################################################################
  
  package App::Serializer::Perl;
  
  use App;
  use App::Serializer;
  @ISA = ( "App::Serializer" );
  
  use strict;
  
  =head1 NAME
  
  App::Serializer::Perl - Interface for serialization and deserialization
  
  =head1 SYNOPSIS
  
      use App;
  
      $context = App->context();
      $serializer = $context->service("Serializer");  # or ...
      $serializer = $context->serializer();
      $data = {
          an => 'arbitrary',
          collection => [ 'of', 'data', ],
          of => {
              arbitrary => 'depth',
          },
      };
      $perl = $serializer->serialize($data);
      $data = $serializer->deserialize($perl);
      print $serializer->dump($data), "\n";
  
  =head1 DESCRIPTION
  
  A Serializer allows you to serialize a structure of data
  of arbitrary depth to a scalar and deserialize it back to the
  structure.
  
  The Perl serializer uses perl data structure syntax as the serialized
  form of the data.  It uses the Data::Dumper module from CPAN to perform
  the deserialization and serialization.
  
  =cut
  
  use Data::Dumper;
  
  sub serialize {
      my ($self, $data) = @_;
      my ($d, $perl);
      
      $d = Data::Dumper->new([ $data ], [ "data" ]);
      $d->Indent(1);
      $perl = $d->Dump();
  
      return $perl;
  }
  
  sub deserialize {
      my ($self, $perl) = @_;
      my ($data);
      $perl =~ s/^\$([_a-zA-Z][_a-zA-Z0-9]*) *=/\$data =/;
      eval $perl;
      $data = $@ if ($@);
      return($data);
  }
  
  sub serialized_content_type {
      'text/perl';
  }
  
  1;
  
  
  
  

Reply via email to