perl - 如何在 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通过损坏的代码)。
我已经尝试追溯我的步骤好几天了,但在有问题的库中找不到什么问题——我有一段时间没有使用这个函数了,自从我上次测试它以来我写了很多新代码,所以很难知道问题出在哪里。我希望有人能够将损坏的输出文件与源文件进行比较,并至少指出我应该寻找可能导致这种结果的方向。我觉得我在大海捞针。
解决方案
推荐阅读
- bash - 致命:使用 cron 作业推送到 git 时无法读取用户名
- python - 从数组中动态设置 QTableWidget 的内容
- laravel - 从 Ionic 登录记住我
- asp.net-mvc - 如何修复 System.FormatException:“输入字符串的格式不正确。”
- vb.net - 无法修复错误“无法加载 System.Net.Http,版本 = 4.2.0.0”
- c# - 使用命令行如何在 ASP.NET 中首先从 DB 搭建脚手架 - 而不是 ASP.NET Core MVC?
- php - 如何在 Laravel 的 UserController 中使用 2 个更新功能
- html - 如何使我的家谱树响应?
- xamarin.forms - Xamarin 离线位置 我们如何通过 GPS 获得离线位置?
- amcharts - amCharts,每条柱都有渐变色