/ / In Perl, come posso decomprimere più variabili? - perl, disimballare

In Perl, come posso decomprimere più variabili? - perl, disimballare

Ho una struttura che contiene:

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

E sto cercando di decomprimerlo in una singola riga, qualcosa del genere:

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

Ma tutto sta andando al primo array (@ids), ho provato i template come "N10 C40 n" e "(N10)(C40)(n)" Quindi, o questo non può essere fatto o non sto usando la stringa del template corretta.

Nota: sto usando i dati big endian.

Qualche suggerimento?

risposte:

7 per risposta № 1

Nell'assegnazione lista il primo array o hash mangerà tutto (come saprebbe dove fermarsi?). Prova questo invece:

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

potresti anche dire

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

1 per risposta № 2

Se l'ordine del @ids non importa:

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