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


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

Index


Code Index:

NAME

Top

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

SYNOPSIS

Top

  use Storable::AMF3 qw(freeze thaw); 

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

	


  # Store/retrieve to disk amf3 data

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




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

  


  # Advisory locking
  use Storable::AMF3 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 AMF3 (Action Message Format ver 3). This is only module and it recognize only AMF3 data. Almost all function implemented in C for speed. And some cases faster then Storable( for me always)

EXPORT

Top

  None by default.

FUNCTIONS =cut

Top

freeze($obj) --- Serialize perl object($obj) to AMF3, and return AMF data
thaw($amf3) --- Deserialize AMF data to perl object, and return the perl object
store $obj, $file --- Store serialized AMF3 data to file
nstore $obj, $file --- Same as store
retrieve $obj, $file --- Retrieve serialized AMF3 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
dclone $file --- Deep cloning data structure
ref_clear $obj --- cleaning arrayref and hashref. (Usefull for destroing complex objects)
ref_lost_memory $obj --- test if object contain lost memory fragments inside. (Example do { my $a = []; @$a=$a; $a})
deparse_amf $bytea --- deparse from bytea one item Return one object and number of bytes readed if scalar context return object

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.

SEE ALSO

Top

Data::AMF, Storable, 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::AMF3;

#use 5.008008;
use strict;
use warnings;
use Fcntl qw(:flock);
our $VERSION = '0.66';
use subs qw(freeze thaw);

require Exporter;
use Carp qw(croak);
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_clear ref_lost_memory
          deparse_amf
          )
    ]
);

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

our @EXPORT = qw();

sub retrieve($) {
    my $file = shift;
    open my $fh, "<", $file or croak "Can't open file \"$file\" for read.";
    my $buf;
    read $fh, $$buf, -s $fh;
    close($fh);
    return thaw($$buf);
}

sub lock_retrieve($) {
    my $file = shift;
    open my $fh, "<", $file or croak "Can't open file \"$file\" for read.";
    flock $fh, LOCK_SH;
    my $buf;
    read $fh, $$buf, -s $fh;
    flock $fh, LOCK_UN;
    close($fh);
    return thaw($$buf);
}

sub store($$) {
    my $object = shift;
    my $file   = shift;
    open my $fh, "+>", $file or croak "Can't open file \"$file\" for write.";
    truncate $fh, 0;

    #print $fh freeze($object);
    my $freeze = \freeze($object);
    croak "Bad object" unless defined $$freeze;
    print $fh $$freeze if defined $$freeze;
    close($fh) and defined $$freeze;
}

sub lock_store($$) {
    my $object = shift;
    my $file   = shift;
    open my $fh, "+>", $file or croak "Can't open file \"$file\" for write.";
    flock $fh, LOCK_EX;
    truncate $fh, 0;

    #print $fh freeze($object);
    my $freeze = \freeze($object);
    croak "Bad object" unless defined $$freeze;
    print $fh $$freeze if defined $$freeze;
    flock $fh, LOCK_UN;
    close($fh) and defined $$freeze;
}

sub nstore($$) {
    my $object = shift;
    my $file   = shift;
    open my $fh, "+>", $file or croak "Can't open file \"$file\" for write.";
    truncate $fh, 0;

    #print $fh freeze($object);
    my $freeze = \freeze($object);
    croak "Bad object" unless defined $$freeze;
    print $fh $$freeze if defined $$freeze;
    close($fh) and defined $$freeze;
}

sub lock_nstore($$) {
    my $object = shift;
    my $file   = shift;
    open my $fh, "+>", $file or croak "Can't open file \"$file\" for write.";
    flock $fh, LOCK_EX;
    truncate $fh, 0;
    my $freeze = \freeze($object);
    if ( defined $$freeze ) {
        print $fh $$freeze;
    }
    else {
        croak "Storable::AMF: Bad object";
    }
    flock $fh, LOCK_UN;
    close($fh) and defined $$freeze;
}
require XSLoader;
XSLoader::load( 'Storable::AMF', $VERSION );
no warnings;
no strict 'refs';
use Storable::AMF0;

#*Storable::AMF3::dclone = *Storable::AMF0::dclone;
BEGIN {
    *{"Storable::AMF3::$_"} = *{"Storable::AMF0::$_"}
      for qw(dclone ref_lost_memory ref_clear);

    #~ print "OK" if __PACKAGE__->can('ref_lost_memory');
    #~ ref_lost_memory([]);
}

# Preloaded methods go here.

1;
__END__
# Below is stub documentation for your module. You'd better edit it!