/ / У Perl, як я можу розпакувати кілька змінних? - Перл, розпакувати

У Perl, як я можу розпакувати кілька змінних? - Перл, розпакувати

У мене є структура, яка містить:

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

І я намагаюся розпакувати його в одному рядку, щось на зразок цього:

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

Але все йде до першого масиву (@ids), я спробував шаблони як "N10 C40 n"і"(N10)(C40)(n)" Отже, це не може бути зроблено, або я не використовую правильний рядок шаблону.

Примітка. Я використовую великі дані endian.

Будь-які натяки?

Відповіді:

7 для відповіді № 1

У переліку списку перший масив або хеш буде їсти все (як би він знав, де зупинитися?). Спробуйте це замість:

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

Ви могли б сказати і це

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

1 для відповіді № 2

Якщо замовлення @ids не важливо:

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