Cheap web site hosting service by Active-Venture.com
  

 Back to Index

unpack

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 substring:

 
    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 %<number> to indicate that you want a <number>-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 consequences.

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 ignored.

See /pack for more examples and notes.

 

  

 

Domain registration - Domain registration service and cheap domain transfer
 

Cheap domain name: Register domain name -
Register domain name services from just
$8.95/year only
 

Register domain name search -
Register domain or buy domain name registration and cheap domain transfer at low, affordable price.

© 2002-2004 Active-Venture.com Web Site Hosting Service

 

[ If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime.   ]

 

 
 
 

Disclaimer: This documentation is provided only for the benefits of our web hosting customers.
For authoritative source of the documentation, please refer to http://www.perldoc.com