#!/usr/bin/perl use strict; # amen use warnings 'all'; # or use perl -w use File::Basename; $| = 1; # :raw for brain-dead OSes (or use binmode). open my $in, '<:raw', $ARGV[0]; # use $in not IN open my $out, '>:raw', "differences"; while (<$in>) { chomp; ($file,$problem,@machines) = split(/,/, $_); ($name,$path,$suffix) = fileparse($file,""); print "$name -- $path -- $suffix\n"; if($problem eq "different") { # get the file from the remote machine foreach $machine (@machines) { next if ($machine eq ""); # consider using File::Temp here $tempfile = "/tmp/" . $name . "_" . $machine; # should consider using File::Remote here system("rcp", "$machine:$file", $tempfile) == 0 or die "Execution (rcp) failed: $?"; # why not use Text::Diff ? print "comparing $name from $machine\n"; system("diff", $file, $tempfile) == 0 or die "Execution (diff) failed: $?"; print "(k)eep or (i)gnore this difference?\n"; $resp = ; print ">>$resp<<\n"; if($resp eq "k") { print $out "$machine $file\n"; } } } }