/ / Wie kann ich in Perl verschiedene Variablen entpacken? - perl, auspacken

Wie kann ich in Perl in mehrere Variablen entpacken? - perl, auspacken

Ich habe eine Struktur, die enthält:

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

Und ich versuche es in einer einzigen Zeile auszupacken, etwa so:

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

Aber alles geht zum ersten Array (@ids), ich habe Templates als "probiert"N10 C40 n" und "(N10)(C40)(n)" Also, entweder kann dies nicht geschehen oder ich verwende nicht die richtige Template-Zeichenfolge.

Hinweis: Ich verwende Big-Endian-Daten.

Irgendwelche Hinweise?

Antworten:

7 für die Antwort № 1

In der Listenzuordnung wird das erste Array oder der erste Hash alles essen (wie würde er wissen, wo er aufhören soll?). Versuchen Sie es stattdessen:

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

du könntest auch sagen

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

1 für die Antwort № 2

Wenn die Reihenfolge der @ids ist egal:

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