use autodie; use List::Util qw(max); use strict; use warnings; my $file1=$ARGV[0]; my $file2=$ARGV[1]; my $file3=$ARGV[2]; open( my $in1, "<", $file1); open( my $in2, "<", $file2); open( my $out, '>', $file3); while (! eof($in1) && ! eof($in2)) { chomp(my $line1 = <$in1>); chomp(my $line2 = <$in2>); my @line1 = split ' ', $line1; my @line2 = split ' ', $line2; my @out = map {$line1[$_] - $line2[$_]} (0..max($#line1,$#line2)); print $out join(' ', @out), "\n"; } warn "Premature end of file: $file1" if ! eof($in2); warn "Premature end of file: $file2" if ! eof($in1);