/ / En Perl, comment puis-je décompresser plusieurs variables? - perl, déballer

En Perl, comment puis-je décompresser plusieurs variables? - perl, déballer

J'ai une structure qui contient:

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

Et j'essaie de le décompresser en une seule ligne, quelque chose comme ceci:

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

Mais tout va au premier tableau (@ids), j'ai "essayé des templates"N10 C40 n" et "(N10)(C40)(n)" Donc, soit cela ne peut pas être fait, soit je n'utilise pas la bonne chaîne de template.

Note: Je "utilise des données en big endian.

Des indices?

Réponses:

7 pour la réponse № 1

Dans l'assignation de la liste, le premier tableau ou le premier hachage mangera tout (comment pourrait-il savoir où s'arrêter?). Essayez plutôt ceci:

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

vous pourriez aussi dire

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

1 pour la réponse № 2

Si l'ordre du @ids n'a pas d'importance:

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