/ / In Perl, jak mogę rozpakować do kilku zmiennych? - perl, rozpakuj

W Perlu, jak mogę rozpakować do kilku zmiennych? - perl, rozpakuj

Mam strukturę, która zawiera:

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

I próbuję rozpakować go w jednym wierszu, coś takiego:

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

Ale wszystko idzie do pierwszej tablicy (@ids), próbowałem szablonów jako "N10 C40 n" i "(N10)(C40)(n)" Tak więc albo nie można tego zrobić, albo nie używam właściwego ciągu szablonów.

Uwaga: Używam dużych danych endian.

Jakieś wskazówki?

Odpowiedzi:

7 dla odpowiedzi № 1

Przy przypisaniu listy pierwsza tablica lub hash będą jeść wszystko (skąd będzie wiedzieć, gdzie się zatrzymać?). Spróbuj zamiast tego:

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

możesz również powiedzieć

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

1 dla odpowiedzi nr 2

Jeśli kolejność @ids nie ma znaczenia:

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