---
name: "Sereal"
section: "3pm"
platform: "linux"
package: "libsereal-perl"
version: "5.004-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Sereal"
---

# Sereal(3pm)

Fast, compact, powerful binary (de-)serialization

## NAME

Sereal - Fast, compact, powerful binary (de-)serialization

## SYNOPSIS

```
    use Sereal qw(
        get_sereal_decoder
        get_sereal_encoder
        clear_sereal_object_cache
        encode_sereal
        decode_sereal
        read_sereal
        read_sereal_file
        write_sereal
        write_sereal_file
        looks_like_sereal
        scalar_looks_like_sereal
        sereal_encode_with_object
        sereal_decode_with_object
        decode_sereal_with_header_data
        sereal_decode_with_header_with_object
        sereal_decode_only_header_with_object
        sereal_decode_only_header_with_offset_with_object
        sereal_decode_with_header_and_offset_with_object
        sereal_decode_with_offset_with_object
        SRL_UNCOMPRESSED
        SRL_SNAPPY
        SRL_ZLIB
        SRL_ZSTD
    );
    # Note: For performance reasons, you should prefer the OO interface,
    #       or sereal_(en|de)code_with_object over the stateless
    #       encode_sereal/decode_sereal functions.
    #       See the Sereal::Performance documentation for details.
```

## DESCRIPTION

*Sereal* is an efficient, compact-output, binary and feature-rich serialization protocol. The Perl encoder is implemented as the Sereal::Encoder module, the Perl decoder correspondingly as Sereal::Decoder. They are distributed separately to allow for safe upgrading without downtime. (Hint: Upgrade the decoder everywhere first, then the encoder.)

This `"Sereal"` module is a very thin wrapper around both `"Sereal::Encoder"` and `"Sereal::Decoder"`. It depends on both and loads both. So if you have a user of both encoder and decoder, it is enough to depend on a particular version of `"Sereal"` and you'll get the most recent released versions of `"Sereal::Encoder"` and `"Sereal::Decoder"` whose version is smaller than or equal to the version of `"Sereal"` you depend on.

The protocol specification and many other bits of documentation can be found in the github repository. Right now, the specification is at \<https://github.com/Sereal/Sereal/blob/master/sereal\_spec.pod\>, there is a discussion of the design objectives in \<https://github.com/Sereal/Sereal/blob/master/README.pod\>, and the output of our benchmarks can be seen at \<https://github.com/Sereal/Sereal/wiki/Sereal-Comparison-Graphs\>.

### EXPORTED FUNCTIONS

It is recommended to use the object-oriented interface of `"Sereal::Encoder"` and `"Sereal::Decoder"` if you care about performance. For detailed performance considerations, see Sereal::Performance.

You can optionally import five functions from `"Sereal"`. `"encode_sereal"` is the same function as Sereal::Encoder's `"encode_sereal"` function. `"decode_sereal"` and `"looks_like_sereal"` are the same as Sereal::Decoder's functions of the same names. Finally, you can import the advanced functional interface `"sereal_encode_with_object"` and `"sereal_decode_with_object"`. Again, see Sereal::Performance for information about those.

After loading the `"Sereal"` module, both `"Sereal::Encoder"` and `"Sereal::Decoder"` are guaranteed to be loaded, so you can use their object-oriented interface.

### get\_sereal\_encoder($OPTSHASH)

Returns a Sereal::Encoder with the given options. This encoder will be shared by other calls to this function.

### get\_sereal\_decoder($OPTSHASH)

Returns a Sereal::Decoder with the given options. This encoder will be shared by other calls to this function.

### clear\_sereal\_object\_cache

Clears cache of objects created via **get\_sereal\_encoder()** and **get\_sereal\_decoder()**. Returns the number of objects that were removed from the cache (the sum of both types).

### write\_sereal\_file($FILENAME,$STRUCT,$APPEND,$OPTS)

Write a sereal packet to `$FILENAME`. See **Sereal::Encoder::encode\_to\_file()**.

### write\_sereal($FILENAME,$STRUCT,$APPEND,$OPTS)

alias for **write\_sereal\_file()**

### read\_sereal\_file($FILENAME,$OPTS,$ROOT)

Read a sereal packet from a file. See **Sereal::Decoder::decode\_from\_file()**.

### read\_sereal($FILENAME,$OPTS,$ROOT)

alias for **read\_sereal\_file()**

## BUGS, CONTACT AND SUPPORT

For reporting bugs, please use the github bug tracker at \<http://github.com/Sereal/Sereal/issues\>.

For support and discussion of Sereal, there are two Google Groups:

Announcements around Sereal (extremely low volume): \<https://groups.google.com/forum/?fromgroups#!forum/sereal-announce\>

Sereal development list: \<https://groups.google.com/forum/?fromgroups#!forum/sereal-dev\>

## AUTHOR

Steffen Mueller \<smueller@cpan.org\>

## ACKNOWLEDGMENT

This module was originally developed for Booking.com. With approval from Booking.com, this module was generalized and published on CPAN, for which the authors would like to express their gratitude.

## LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## COPYRIGHT AND LICENSE

Copyright (C) 2012, 2013, 2014 by Steffen Mueller
