我有两个文本文件需要具有相同的值。
$ diff A.txt B.txt
4a5
> I have this extra line.
$
在Perl中打开文件
open (ONE, "<A.txt");
open (TWO, "<B.txt");
我怎样才能在Perl中做这样的差异? Perl是否有内置差异,还是需要使用unix diff
实用程序?我不想为此实现我自己的diff算法。
我确实需要有关文件不同之处的信息,但我不需要使用unix diff
实用程序。这只是一个例子。
答案 0 :(得分:12)
您可以尝试使用Text::Diff
或者,UNIX实用程序可以是一个选项。
答案 1 :(得分:5)
如果我只需要知道它们是相同的(即没有发现它们是如何不同的),我只需使用Digest::MD5来查看它们是否提出相同的摘要。两个不同的文件可能具有相同的MD5摘要的可能性非常小,因此您甚至可以尝试Digest::SHA1。
如果您想知道哪些行不同,那么您可以使用Algorithm::Diff,也许与Tie::File一起使用。但是,如果您的目标平台上没有diff工具,还有Algorithm::Diff附带的 diff 程序。虽然你可以解决这个问题,但你可能只想将它的功能复制到子程序中。 Text :: Diff构建在Algorithm::Diff之上,所以它可能已经想要你想要了。
答案 2 :(得分:2)
不,Perl没有内置的“差异”设施。要么使用外部模块,要么使用Perl的数据结构(散列,数组等),或者为两个文件创建文件句柄,并使用文件句柄(while循环)迭代文件,逐行比较它们。此方法假定您的文件已排序。另一个不太优雅的方法是从Perl调用“diff”,但我建议不要这样做。
最后,如果Perl不是必须的,只需使用Unix diff
实用程序(编写shell脚本)。
答案 3 :(得分:0)
您可以使用核心模块File::Compare
:
use File::Compare;
if (compare("file1","file2") == 0) {
print "They're equal\n";
}
文档为here。