Função Perl pack
Descrição
Esta função avalia as expressões em LIST e as empacota em uma estrutura binária especificada por EXPR. O formato é especificado usando os caracteres mostrados na Tabela abaixo -
Cada caractere pode ser seguido opcionalmente por um número, que especifica uma contagem de repetição para o tipo de valor que está sendo empacotado. Isso é nibbles, chars ou mesmo bits, de acordo com o formato. Um valor de * se repete para quantos valores permanecerem em LIST. Os valores podem ser descompactados com a função desempacotar.
Por exemplo, a5 indica que cinco letras são esperadas. b32 indica que 32 bits são esperados. h8 indica que 8 nybbles (ou 4 bytes) são esperados. P10 indica que a estrutura tem 10 bytes de comprimento.
Sintaxe
A seguir está a sintaxe simples para esta função -
pack EXPR, LIST
Valor de retorno
Esta função retorna uma versão compactada dos dados em LIST usando TEMPLATE para determinar como eles são codificados.
Aqui está a tabela que fornece os valores a serem usados no TEMPLATE.
| Sr. Não. | Descrição do personagem |
|---|---|
| 1 | a String de caracteres ASCII preenchida com caracteres nulos |
| 2 | A String de caracteres ASCII preenchida com espaços |
| 3 | b Sequência de bits, o mais baixo primeiro |
| 4 | B Sequência de bits, o mais alto primeiro |
| 5 | c Um caractere com sinal (geralmente varia de -128 a 127) |
| 6 | C Um caractere sem sinal (geralmente 8 bits) |
| 7 | d Um número de ponto flutuante de precisão dupla |
| 8 | f Um número de ponto flutuante de precisão única |
| 9 | h String hexadecimal, dígito mais baixo primeiro |
| 10 | H String hexadecimal, dígito mais alto primeiro |
| 11 | i Um inteiro assinado |
| 12 | I Um inteiro sem sinal |
| 13 | l Um inteiro longo assinado |
| 14 | L Um inteiro longo sem sinal |
| 15 | n Um número inteiro curto na ordem da rede |
| 16 | N Um inteiro longo na ordem da rede |
| 17 | p Um ponteiro para uma string |
| 18 | s Um inteiro curto assinado |
| 19 | S Um inteiro curto sem sinal |
| 20 | u Converter para o formato uuencode |
| 21 | v Um número inteiro curto na ordem VAX (little-endian) |
| 22 | V Um número inteiro longo na ordem VAX |
| 23 | x Um byte nulo |
| 24 | X Indica "voltar um byte" |
| 25 | @ Preencher com nulos (ASCII 0) |
Exemplo
A seguir está o código de exemplo que mostra seu uso básico -
#!/usr/bin/perl -w
$bits = pack("c", 65);
# prints A, which is ASCII 65.
print "bits are $bits\n";
$bits = pack( "x" );
# $bits is now a null chracter.
print "bits are $bits\n";
$bits = pack( "sai", 255, "T", 30 );
# creates a seven charcter string on most computers'
print "bits are $bits\n";
@array = unpack( "sai", "$bits" );
#Array now contains three elements: 255, T and 30.
print "Array $array[0]\n";
print "Array $array[1]\n";
print "Array $array[2]\n";
Quando o código acima é executado, ele produz o seguinte resultado -
bits are A
bits are
bits are �T
Array 255
Array T
Array 30