My vote is for Convert::Binary::C.
Simply point it at some C header files, and you can then easily pack and unpack structures with amazing ease. This module allows you to configure settings so that it can accommodate big-endian 64 bit systems and little-endian 8 bitters, and everything in between.
You can also use hooks to handle serializing and deserializing data into perl types. For example, if you have fixed point numbers that you want to treat as floats in your perl code, you can set a hook on the typedef, so that translation is automatic.
This module is brilliant. I do embedded development in C for ARM and 8051 systems and this module makes my life much easier. But anyone who needs to work with big ugly C structures should use this module. It's so much more powerful and easier to use than pack/unpack templates.