/ / Em Perl, como posso descompactar várias variáveis? - perl, desempacote

Em Perl, como posso descompactar várias variáveis? - perl, desempacote

Eu tenho uma estrutura que contém:

struct mystruct{
int                id[10];
char               text[40];
unsigned short int len;
};

E eu estou tentando descompactá-lo em uma única linha, algo assim:

  my(@ids,$text,$length) = unpack("N10C40n",$buff) ;

Mas tudo está indo para a primeira matriz (@ids), eu tentei templates como "N10 C40 n"e"(N10)(C40)(n)" Então, isso não pode ser feito ou eu não estou usando a string de modelo adequada.

Nota: Estou usando dados big endian.

Alguma dica?

Respostas:

7 para resposta № 1

Na atribuição de lista, o primeiro array ou hash irá comer tudo (como saberá onde parar?). Tente isso:

my @unpacked        = unpack "N10Z40n", $buff;
my @ids             = @unpacked[0 .. 9];
my ($text, $length) = @unpacked[10, 11];

você também pode dizer

my @ids;
(@ids[0 .. 9], my ($text, $length)) = unpack "N10Z40n", $buff;

1 para resposta № 2

Se a ordem do @ids não importa:

my ($length, $text, @ids) = reverse unpack("N10C40n",$buff) ;