【发布时间】:2023-04-07 16:36:01
【问题描述】:
这个问题来自于需要确保我对代码所做的更改不会影响它输出到文本文件的值。理想情况下,我会滚动一个 sub 来接收两个文件名和 return 1 或 return 0,具体取决于内容是否相同、空格和所有内容。
鉴于文本处理是 Perl 的强项,比较两个文件并确定它们是否相同应该很容易(下面的代码未经测试)。
use strict;
use warnings;
sub files_match {
my ( $fileA, $fileB ) = @_;
open my $file1, '<', $fileA;
open my $file2, '<', $fileB;
while (my $lineA = <$file1>) {
next if $lineA eq <$file2>;
return 0 and last;
}
return 1;
}
我能想到的唯一方法(无 CPAN 模块)是打开有问题的两个文件,并逐行读取它们,直到发现差异。如果没有发现差异,则文件必须相同。
但这种方法是有限且笨拙的。如果两个文件的总行数不同怎么办?我应该打开和关闭以确定行数,然后重新打开以扫描文本吗?呸。
我在perlfaq5 中没有看到与此相关的任何内容。我想远离模块,除非它们随核心 Perl 5.6.1 发行版一起提供。
【问题讨论】:
-
为什么不使用差异? -- 如果你在 *nix
-
@heferav :将它可以熟练处理的内容呈现给 Perl。我在 Unix 编程方面并没有真正做太多,仅此而已;)
-
很好。阅读此手册页ss64.com/bash/diff.html,diff 实用程序是专门为突出两个文本文件之间的差异而创建的。
-
diff --brief然后检查它的退出值就足够了。
标签: perl file comparison