Perl5 リファレンス

       unpack TEMPLATE,EXPR
               `unpack' does the reverse of `pack': it takes a
               string and expands it out into a list of values.
               (In scalar context, it returns merely the first
               value produced.)

               The string is broken into chunks described by the
               TEMPLATE.  Each chunk is converted separately to a
               value.  Typically, either the string is a result
               of `pack', or the bytes of the string represent a
               C structure of some kind.

               The TEMPLATE has the same format as in the `pack'
               function.  Here's a subroutine that does

                   sub substr {
                       my($what,$where,$howmuch) = @_;
                       unpack("x$where a$howmuch", $what);

               and then there's

                   sub ordinal { unpack("c",$_[0]); } # same as ord()

               In addition to fields allowed in pack(), you may
               prefix a field with a % to indicate that
               you want a -bit checksum of the items
               instead of the items themselves.  Default is a
               16-bit checksum.  Checksum is calculated by
               summing numeric values of expanded values (for
               string fields the sum of `ord($char)' is taken,
               for bit fields the sum of zeroes and ones).

               For example, the following computes the same
               number as the System V sum program:

                   $checksum = do {
                       local $/;  # slurp!
                       unpack("%32C*",<>) % 65535;

               The following efficiently counts the number of set
               bits in a bit vector:

                   $setbits = unpack("%32b*", $selectmask);

               The `p' and `P' formats should be used with care.
               Since Perl has no way of checking whether the
               value passed to `unpack()' corresponds to a valid
               memory location, passing a pointer value that's
               not known to be valid is likely to have disastrous

               If the repeat count of a field is larger than what
               the remainder of the input string allows, repeat
               count is decreased.  If the input string is longer
               than one described by the TEMPLATE, the rest is

               See the pack entry elsewhere in this document for
               more examples and notes.