tkdiff和diff不工作,因为\0“;[Perl]

tkdiff和diff不工作,因为\0“;[Perl],perl,diff,Perl,Diff,我偶然发现了以下Perl代码: my $val = $x->insertEl($data) or die $y->ErrorMessage(); print "\0$val\0"; 在这种情况下,\0意味着什么? 该脚本创建了一个调试日志,其中\0$val\被写入该日志(我将debugFun()更改为print,以便更容易解释)。如果我尝试将tkdiff与其他文件一起使用,它将失败,并出现以下错误: diff failed: Files file1 and file2 differ

我偶然发现了以下Perl代码:

my $val = $x->insertEl($data) or die $y->ErrorMessage();
print "\0$val\0";
在这种情况下,
\0
意味着什么? 该脚本创建了一个调试日志,其中
\0$val\
被写入该日志(我将
debugFun()
更改为
print
,以便更容易解释)。如果我尝试将tkdiff与其他文件一起使用,它将失败,并出现以下错误:

diff failed: Files file1 and file2 differ. Child process exited abnormally
此外,如果我使用常规的diff命令,它将打印:

diff failed: Files file1 and file2 differ.

如果我删除
\0
,它将正确打印,tkdiff和diff将正常工作。所以问题是
\0
但是为什么呢?

代码在值中填充了。虽然它们确实有一些用途,但我不确定它们在日志文件中是做什么的

melpomene的链接显示,这些工具受到这些字符的影响,首先是决定文件是二进制文件。手册提供了
-一个
开关,在该开关下,
diff
仍将文件作为文本进行比较,但这只会通过更详细地报告差异而有所帮助;这些文件是不同的

perl -wE'say "noway"'   > t1.out
perl -wE'say "no\0way"' > t2.out
wc -c t1.out t2.out              #--> 6 and 7
因此,您必须删除这些空字符

如果有很好的理由打印它们,那么这是清除它们的一种方法

perl -pe's/\x00//g' t2.out > nonull_t2.out

否则,只需更改打印,使其不在第一位。

代码正在用填充值填充。虽然它们确实有一些用途,但我不确定它们在日志文件中是做什么的

melpomene的链接显示,这些工具受到这些字符的影响,首先是决定文件是二进制文件。手册提供了
-一个
开关,在该开关下,
diff
仍将文件作为文本进行比较,但这只会通过更详细地报告差异而有所帮助;这些文件是不同的

perl -wE'say "noway"'   > t1.out
perl -wE'say "no\0way"' > t2.out
wc -c t1.out t2.out              #--> 6 and 7
因此,您必须删除这些空字符

如果有很好的理由打印它们,那么这是清除它们的一种方法

perl -pe's/\x00//g' t2.out > nonull_t2.out

否则,只需更改打印,使它们一开始就不在那里。

有任何想法、线索或怀疑为什么会在那里吗?有了GNU
diff
,您可以使用
-a
-text
来强制进行文本比较(即获得通常的输出)。有什么想法、线索或怀疑为什么会在那里吗?有了GNU
diff
,您可以使用
-a
-text
强制进行文本比较(即获取通常的输出)。