由于“\0”[Perl],tkdiff 和 diff 不起作用
tkdiff and diff does not work because of "\0" [Perl]
我偶然发现了以下 Perl 代码:
my $val = $x->insertEl($data) or die $y->ErrorMessage();
print "[=10=]$val[=10=]";
在这种情况下,[=13=]
是什么意思?
此脚本创建一个调试日志,其中 [=14=]$val\
被写入此日志(我将 debugFun()
更改为 print
以便更容易解释)。如果我尝试使用其他文件进行 tkdiff,它将失败并出现以下错误:
diff failed: Files file1 and file2 differ. Child process exited abnormally
此外,如果我使用常规 diff 命令,它将打印:
diff failed: Files file1 and file2 differ.
如果我删除 [=13=]
它将正确打印,并且 tkdiff 和 diff 将工作。所以问题是 [=13=]
但为什么呢?
代码用 null characters 填充值。虽然它们确实有一些用途,但我不确定它们在日志文件中是做什么的。
正如 melpomene 的 link 到 diffutils#Binary 所示,这些工具会受到这些字符的影响,首先是决定文件是二进制文件。该手册提供了 -a
开关,在该开关下 diff
仍然将文件作为文本进行比较,但这只会有助于更详细地报告差异;文件 不同
perl -wE'say "noway"' > t1.out
perl -wE'say "no[=10=]way"' > t2.out
wc -c t1.out t2.out #--> 6 and 7
因此您必须删除那些空字符。
如果有充分的理由打印它们,那么这是清除它们的一种方法
perl -pe's/\x00//g' t2.out > nonull_t2.out
否则只需更改印刷品,让它们一开始就不存在。
我偶然发现了以下 Perl 代码:
my $val = $x->insertEl($data) or die $y->ErrorMessage();
print "[=10=]$val[=10=]";
在这种情况下,[=13=]
是什么意思?
此脚本创建一个调试日志,其中 [=14=]$val\
被写入此日志(我将 debugFun()
更改为 print
以便更容易解释)。如果我尝试使用其他文件进行 tkdiff,它将失败并出现以下错误:
diff failed: Files file1 and file2 differ. Child process exited abnormally
此外,如果我使用常规 diff 命令,它将打印:
diff failed: Files file1 and file2 differ.
如果我删除 [=13=]
它将正确打印,并且 tkdiff 和 diff 将工作。所以问题是 [=13=]
但为什么呢?
代码用 null characters 填充值。虽然它们确实有一些用途,但我不确定它们在日志文件中是做什么的。
正如 melpomene 的 link 到 diffutils#Binary 所示,这些工具会受到这些字符的影响,首先是决定文件是二进制文件。该手册提供了 -a
开关,在该开关下 diff
仍然将文件作为文本进行比较,但这只会有助于更详细地报告差异;文件 不同
perl -wE'say "noway"' > t1.out
perl -wE'say "no[=10=]way"' > t2.out
wc -c t1.out t2.out #--> 6 and 7
因此您必须删除那些空字符。
如果有充分的理由打印它们,那么这是清除它们的一种方法
perl -pe's/\x00//g' t2.out > nonull_t2.out
否则只需更改印刷品,让它们一开始就不存在。