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

时间:2009-07-22 13:00:33

标签: perl unpack

我有一个包含的结构:

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) “ 所以,要么这不能做,要么我没有使用正确的模板字符串。

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

任何提示?

2 个答案:

答案 0 :(得分:7)

在列表赋值中,第一个数组或哈希会吃掉所有东西(它怎么知道在哪里停止?)。试试这个:

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 :(得分:1)

如果@ids的顺序无关紧要:

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