struct {
 char len1;
 char word1[len1];
 char len2;
 char word2[len1];
 char len3;
 char word3[len1];
}

みたいな構造の可変長のバイナリなデータがあるんですが、
これをperlで綺麗でかっこよく展開する方法ってないですか?

今は下のようなことをしてるのですが、なんか見辛いし汚いので…

$data = "\4ABCD\3EFG\7HIJKLMN";

($len1,$data) = unpack("Ca*",$data);
($word1,$data) = unpack("a${len1}a*",$data);
($len2,$data) = unpack("Ca*",$data);
($word2,$data) = unpack("a${len2}a*",$data);
($len3,$data) = unpack("Ca*",$data);
($word3,$data) = unpack("a${len3}a*",$data);

print "$word1\n$word2\n$word3\n";