我正在使用Transfer-Encoding: chunked
来编写HTTP响应。
通过以下内容将响应拆分为:
my $template = "a$buffer_size" x int(length($response)/$buffer_size) . 'a*';
foreach my $buffer (unpack $template, $response){
...
}
当内容类型为text/html
时,此功能正常,但它正在破坏二进制数据,例如application/pdf
。
可以unpack
用于将二进制数据拆分成相等的长度吗?
答案 0 :(得分:1)
仍然不确定为什么unpack
在这种情况下失败了,但我偶然发现了一个解决方案。
如果我使用内存文件操作响应,unpack
可以正常工作:
my $resp;
open (my $fh, '>', \$resp);
my $fh_old = select($fh);
print $response;
close $fh;
select($fh_old);
$response = $resp;
有关其原因的任何见解?
答案 1 :(得分:0)
二进制数据完全正常。问题出在其他地方。 (你binmode
所有相关的句柄了吗?)