如何使用Perl的解包?

如何使用Perl的解包?,perl,unpack,Perl,Unpack,我有一个http post的JSON正文,必须拆分为80个字符的双引号字符串-但是-每当我使用解包读取前80个字符时,源字符串中的字符串指针在每行末尾没有CR/LF分隔,但从未更改-例如,下面的循环不断重复读取同一字符串-我假设unpack预期CR/LF是预先存在的?如果不是,我该怎么办 @row =unpack 'A80', $body; foreach $line (@body) { @row =unpack 'A80', $body; print '"'.$line.'"'

我有一个http post的JSON正文,必须拆分为80个字符的双引号字符串-但是-每当我使用解包读取前80个字符时,源字符串中的字符串指针在每行末尾没有CR/LF分隔,但从未更改-例如,下面的循环不断重复读取同一字符串-我假设unpack预期CR/LF是预先存在的?如果不是,我该怎么办

@row =unpack 'A80', $body;
foreach $line (@body)
{
    @row =unpack 'A80', $body;
    print '"'.$line.'"' ;
}

下面是我如何解决这个问题的:

my $n = 80;    # $n is group size.
my @groups = unpack "a$n" x (length( $body ) /$n ), $body;

# print @groups;
foreach $line (@groups) {
    print '"'.$line.'"' ;
}

很难理解你的情况,但从你自己的回答来看,你需要这个

my @groups = unpack '(a80)*', $body;
从你的问题来看,这样可能更好

my @groups = unpack '(A80)*', $body;

但你真的需要描述$body从何而来,以及你期望@body从何而来的结果?您需要提供一个链接作为示例输入,以及实际工作的代码,以便我们可以进行测试。你是否有严格的使用习惯;并使用警告;启用?真的不清楚你想做什么。无论如何,没有与解包相关的字符串指针。也许您正在考虑pos,它只与正则表达式一起使用。如果您试图解析JSON,您应该使用。如果这不是您想要做的,您应该澄清您的问题,现在还不清楚。您知道Perl吗?$body从哪里来?@MaxLybbert:我同意。但是,除非你对自己的诊断完全有信心,否则你只需发布一个解决方案,你的评论就会引出更多的信息。你还需要知道什么才能更正OP的代码?这不是你问题的答案