... and when you get an empty file in one directory and a DVD image in the other, you're in trouble :)
Better to use Corion's idea and throw the output away:
$ret = system("diff >/dev/null -r $some_dir/$f $other_dir/$f");
if(0 == $ret) { # files are the same
} elsif(1 == $ret) { # files differ
} else { # Error from diff
}
That would still write the whole DVD image to /dev/null in my imaginary case even though it's clear after the first line that there are in fact differences. If that's a real possibility, something like your idea but without reading the whole diff would probably be faster:
open(my $fh, '-|', "diff -r $some_dir/$f $other_dir/$f") or die "diff
+: $!";
my $diff = <$fh>;
close $fh;
if($diff) { # there were diffs
}
After the first line of output, diff gets a SIGPIPE because we closed it output and dies. One should probably check $? for errors from diff there, too. |