Bot-Cobalt
view release on metacpan or search on metacpan
lib/Bot/Cobalt/Serializer.pm view on Meta::CPAN
close($out_fh)
or carp "close failed for $path: $!";
return 1
}
1;
__END__
=pod
=head1 NAME
Bot::Cobalt::Serializer - Bot::Cobalt serialization wrapper
=head1 SYNOPSIS
use Bot::Cobalt::Serializer;
## Spawn a YAML (1.1) handler:
my $serializer = Bot::Cobalt::Serializer->new;
## Spawn a JSON handler:
my $serializer = Bot::Cobalt::Serializer->new('JSON');
## ...same as:
my $serializer = Bot::Cobalt::Serializer->new( Format => 'JSON' );
## Serialize some data to our Format:
my $ref = { Stuff => { Things => [ 'a', 'b'] } };
my $frozen = $serializer->freeze( $ref );
## Turn it back into a Perl data structure:
my $thawed = $serializer->thaw( $frozen );
## Serialize some $ref to a file at $path
## The file will be overwritten
## Returns false on failure
$serializer->writefile( $path, $ref );
## Do the same thing, but without locking
$serializer->writefile( $path, $ref, { Locking => 0 } );
## Turn a serialized file back into a $ref
## Boolean false on failure
my $ref = $serializer->readfile( $path );
## Do the same thing, but without locking
my $ref = $serializer->readfile( $path, { Locking => 0 } );
=head1 DESCRIPTION
Various pieces of L<Bot::Cobalt> need to read and write serialized perl data
from/to disk.
This simple OO frontend makes it trivially easy to work with a selection of
serialization formats, automatically enabling Unicode encode/decode and
optionally providing the ability to read/write files directly.
Errors will typically throw fatal exceptions (usually with a stack
trace) via L<Carp/confess> -- you may want to look into L<Try::Tiny> for
handling them cleanly.
=head1 METHODS
=head2 new
my $serializer = Bot::Cobalt::Serializer->new;
my $serializer = Bot::Cobalt::Serializer->new( $format );
my $serializer = Bot::Cobalt::Serializer->new( %opts );
Spawn a serializer instance. Will croak with a stack trace if you are
missing the relevant serializer module; see L</Format>, below.
The default is to spawn a B<YAML::XS> (YAML1.1) serializer with error
logging to C<carp>.
You can spawn an instance using a different Format by passing the name
of the format as an argument:
$handle_syck = Bot::Cobalt::Serializer->new('YAML');
$handle_yaml = Bot::Cobalt::Serializer->new('YAMLXS');
$handle_json = Bot::Cobalt::Serializer->new('JSON');
=head3 Format
Specify an input and output serialization format; this determines the
serialization method used by L</writefile>, L</readfile>, L</thaw>, and
L</freeze> methods. (You can change formats on the fly by calling
B<Format> as a method.)
Currently available formats are:
=over
=item *
B<YAML> - YAML1.0 via L<YAML::Syck>
=item *
B<YAMLXS> - YAML1.1 via L<YAML::XS> I<(default)>
=item *
B<JSON> - JSON via L<JSON::MaybeXS>
=back
The default is YAML I<(YAML Ain't Markup Language)> 1.1 (B<YAMLXS>)
YAML is very powerful, and the appearance of the output makes it easy for
humans to read and edit.
JSON is a more simplistic format, often more suited for network transmission
and talking to other networked apps. JSON is noticably faster than YAML.
=head2 freeze
Turn the specified reference I<$ref> into the configured B<Format>.
( run in 1.086 second using v1.01-cache-2.11-cpan-39bf76dae61 )