首页 > 解决方案 > 如何在 Perl 中定位导致损坏的二进制输出的代码

问题描述

我有一个相对复杂的 Perl 程序来管理我的站点的各种页面和资源。在某个地方,我在几千行的库中弄乱了一些东西,该库为系统的大多数不同脚本提供基本服务,因此我的代码库中输出 PDF 或 PNG 文件的脚本不再可以有效地输出这些文件。如果我重写执行输出的脚本以避免使用该库,它们可以工作,但我想弄清楚我在库中破坏了什么导致它损害二进制输出。

例如,在一段代码中,我打开一个 PDF 文件(或任何类型的文件——它会自动检测 mime 类型),然后直接打印它:

#Figure out MIME type.
use File::MimeInfo::Magic;
$mimeType = mimetype($filename);

my $fileData;
open (resource, $filename);
foreach my $self (<resource>) { $fileData .= $self; }
close (resource);

print "Content-type: " . $mimeType . "\n\n";
print $fileData;
exit;

这很好用,但是在编辑我提到的可疑库时,我做了一些破坏它的事情,我对自己的所作所为感到困惑。我一直在玩不同的 utf8 编码函数,但据我所知,我删除了所有的实验代码,问题仍然存在。仅仅加载该库,而不调用它的任何函数,会破坏脚本输出文件的能力。

如果我在文本编辑器中打开它,输出实际上已被明显损坏。如果我比较上面给出的代码和输出打开的源文件,尽管在输出之前上面的代码中没有处理,源文件输出文件有很多差异(这些链接指向运行的示例 PDF通过损坏的代码)。

我已经尝试追溯我的步骤好几天了,但在有问题的库中找不到什么问题——我有一段时间没有使用这个函数了,自从我上次测试它以来我写了很多新代码,所以很难知道问题出在哪里。我希望有人能够将损坏的输出文件与源文件进行比较,并至少指出我应该寻找可能导致这种结果的方向。我觉得我在大海捞针。

标签: perlpdfencodingutf-8

解决方案


推荐阅读