有没有办法获得“解包”调用“消耗”的字节数? 我只想通过几个步骤从长字符串中解析(解包)不同的结构,如下所示:
my $record1 = unpack "TEMPLATE", substr($long_str, $pos);
# Advance position pointer
$pos += NUMBER_OF_BYTES_CONSUMED_BY_LAST_UNPACK();
# Other codes that might determin what to read in following steps
# ...
# Read again at the new position
my $record2 = unpack "TEMPLATE2", substr($long_str, $pos);
答案 0 :(得分:3)
unpack
这似乎是一个明显的遗漏,不是吗?作为安慰奖,您可以在解包模板的末尾使用a*
来返回输入字符串的未使用部分。
# The variable-length "w" format is to make the example slightly more interesting.
$x = pack "w*", 126..129;
while(length $x) {
# unpack one number, keep the rest packed in $x
($n, $x) = unpack "wa*", $x;
print $n;
}
如果你的打包字符串非常长,这不是一个好主意,因为每次你打开包装时它必须复制字符串的“余数”部分。