/ / En Perl, ¿cómo puedo descomprimir en varias variables? - perl, desempaquetar

En Perl, ¿cómo puedo descomprimir en varias variables? - perl, desempaquetar

Tengo una estructura que contiene:

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

Y estoy tratando de descomprimirlo en una sola línea, algo como esto:

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

Pero todo va a la primera matriz (@ids), he intentado plantillas como "N10 C40 n"y"(N10)(C40)(n)" Entonces, o esto no se puede hacer o no estoy usando la cadena de plantilla adecuada.

Nota: Estoy usando datos de Big Endian.

¿Algún consejo?

Respuestas

7 para la respuesta № 1

En la asignación de listas, la primera matriz o hash comerá todo (¿cómo sabría dónde detenerse?). Pruebe esto en su lugar:

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

también podrías decir

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

1 para la respuesta № 2

Si el orden de la @ids no importa:

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