Storable::AMF - Perl extension for serialize/deserialize AMF0/AMF3 data


Storable-AMF documentation Contained in the Storable-AMF distribution.

Index


Code Index:

NAME

Top

Storable::AMF - Perl extension for serialize/deserialize AMF0/AMF3 data

SYNOPSIS

Top

  use Storable::AMF0 qw(freeze thaw); # or use Storable::AMF3 qw(freeze thaw)l for AMF3 format

  $amf0 = freeze($perl_object);
  $perl_object = thaw($amf0);

	


  # Store/retrieve to disk amf0 data

  store $perl_object, 'file';
  $restored_perl_object = retrieve 'file';




  use Storable::AMF0 qw(nstore freeze thaw dclone);

  # Network order: Due to spec of AMF0 format objects (hash, arrayref) stored in network order.
  # and thus nstore and store are synonyms 

  nstore \%table, 'file';
  $hashref = retrieve('file'); 

  


  # Advisory locking
  use Storable::AMF0 qw(lock_store lock_nstore lock_retrieve)
  lock_store \%table, 'file';
  lock_nstore \%table, 'file';
  $hashref = lock_retrieve('file');

  # Deparse one object
  use Storable::AMF0 qw(deparse_amf); 

  my( $obj, $length_of_packet ) = deparse_amf( my $bytea = freeze($a1) . freeze($a) ... );

  - or -
  $obj = deparse_amf( freeze($a1) . freeze($a) ... );




DESCRIPTION

Top

This module is (de)serializer for Adobe's AMF0/AMF3 (Action Message Format ver 0-3). This is only module and it recognize only AMF data. Almost all function implemented in C for speed. And some cases faster then Storable( for me always)

EXPORT

Top

  None by default.

MOTIVATION

Top

There are several modules for work with AMF data and packets written in perl, but them are lack a speed. This module writen in C for speed. Also this package allow freeze and thaw AMF3 data which is nobody do.

ERROR REPORTING In case of errors functions freeze and thaw returns undef and set $@ error description. (Error description at the moment is criptic, forgive me..)

Top

FUNCTIONS =cut

Top

freeze($obj) --- Serialize perl object($obj) to AMF, and return AMF data
thaw($amf0) --- Deserialize AMF data to perl object, and return the perl object
store $obj, $file --- Store serialized AMF0 data to file
nstore $obj, $file --- Same as store
retrieve $obj, $file --- Retrieve serialized AMF0 data from file
lock_store $obj, $file --- Same as store but with Advisory locking
lock_nstore $obj, $file --- Same as lock_store
lock_retrieve $file --- Same as retrieve but with advisory locking
deparse_amf $bytea --- deparse from bytea one item Return one object and number of bytes readed if scalar context return object
dclone $file --- Deep cloning data structure
ref_clear $obj --- recurrent cleaning arrayrefs and hashrefs.
ref_lost_memory $obj --- test if object contain lost memory fragments inside. (Example do { my $a = []; @$a=$a; $a})

NOTICE

Top

  Storable::AMF is currently is at development stage. 

LIMITATION

Top

At current moment and with restriction of AMF0/AMF3 format referrences to scalar are not serialized, and can't/ may not serialize tied variables. And dualvars (See Scalar::Util) are serialized as string value. Freezing CODEREF, IO, Regexp, REF, GLOB, SCALAR referenses restricted.

TODO

Top

Add some options to functions.

Document freezing and thawing XMLDocument, XML, Date May be add some IO and packet manipulated function (SEE AMF0/AMF3 at Adobe)

SEE ALSO

Top

Data::AMF, Storable, Storable::AMF0, Storable::AMF3

AUTHOR

Top

Anatoliy Grishaev, <grian at cpan dot org>

COPYRIGHT AND LICENSE

Top


Storable-AMF documentation Contained in the Storable-AMF distribution.
package Storable::AMF;
use strict;
use warnings;
use Fcntl qw(:flock);
use Storable::AMF0;
our $VERSION = '0.66';
use vars qw/$OPT/;
require Exporter;
our @ISA = qw(Exporter);

# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.

our %EXPORT_TAGS = (
    'all' => [
        qw(
          freeze thaw	dclone retrieve lock_retrieve lock_store lock_nstore store nstore ref_lost_memory ref_clear
          deparse_amf
          )
    ]
);

our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );

our @EXPORT = qw();

our $OPTS;

no strict 'refs';
*{"Storable::AMF::$_"} = *{"Storable::AMF0::$_"} for @{ $EXPORT_TAGS{'all'} };

package Storable::AMF0;

1;
__END__