in reply to Re: Dealing with diff command within perl
in thread Dealing with diff command within perl

... 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.