Для того чтобы скрипт получил доступ к бинарным данным, он должен распаковать их, перейдя в свой скалярный формат. Скрипты Perl распаковывают данные, используя функцию unpack , которая имеет следующий формат:
$result = unpack(Template, Expression);
Expression является обычной строковой переменной, которая содержит бинарные данные, прочитанные функцией sysread , но может быть также выражением, которое необходимо интерпретировать как строку. Template представляет собой символьную строку-шаблон, описывающую, как интерпретировать значения в операнде Expression . Следующий фрагмент программы иллюстрирует использование функции unpack :
($ r , $ g , $ b ) = unpack (“ C 3”, $ color ); # распакует в 3 символа
@ longwords = unpack (“ L *”, $ data ); # распакует в список длинных # слов
@stuff = unpack(“S2L”, $bin); # распакует в 2 shorts и long
Каждый символ шаблона может сопровождаться числом, указывающим, сколько раз использовать этот символ. Если вместо числа стоит звездочка (*), то операция будет выполняться для всех остающихся данных в строке. Если число не поставлено, то она выполняется однократно. Скрипт может поместить любое число символов шаблона в строку Template . В таблице 12.4 перечисляются символы, входящие в строковый параметр Template вместе с описанием влияния каждого из них на выполнение функции unpack .
Символ шаблона Описание
a Строка ASCII без нулевого символа
А Строка ASCII без нулевого символа
b Битовая строка (младший бит идет первым)
В Битовая строка (старший бит идет первым)
с Однобайтовый символ со знаком
С Однобайтовый символ без знака
d Значение с плавающей запятой, двойной точности
f Значение с плавающей запятой, одинарной точности шаблона h Строка шестнадцатиричных значений (младшие разряды идут первыми)
Н Строка шестнадцатиричных значений (старшие разряды идут первыми)
i Целое со знаком
I Целое без знака
l Целое со знаком типа long
L То же, только без знака
n Короткое целое
N Длинное целое
p Указатель на строку
s Короткое целое со знаком
S Короткое целое без знака
u Раскодировка строки
v Короткое целое
V Длинное целое
х Пропустить вперед один байт
Х Пропустить назад один байт
@ Перейти на указанную позицию в строке
Табл. 12.4. Символы шаблона