在Perl中,如何解压缩到几个变量?

Ark*_*nez 0 perl unpack

我有一个包含以下内容的结构:

struct mystruct{
  int                id[10];
  char               text[40];
  unsigned short int len;
};
Run Code Online (Sandbox Code Playgroud)

而我正试图将它解压缩到一行,如下所示:

  my(@ids,$text,$length) = unpack("N10C40n",$buff) ;
Run Code Online (Sandbox Code Playgroud)

但是一切都是第一个数组(@ids),我已经尝试了模板" N10 C40 n"和" (N10)(C40)(n)"所以,要么这不能完成,要么我没有使用正确的模板字符串.

注意:我正在使用大端数据.

任何提示?

Cha*_*ens 7

在列表赋值中,第一个数组或散列将吃掉所有内容(它将如何知道停止的位置?).试试这个:

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

你也可以说

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