#!/usr/bin/perl -w use strict; # Run a program, captures its output, and return all the lines sub Run($) { my ($prog) = @_; my @lines = `$prog`; if( $? != 0 ) { die "$prog failed: $?\n"; } unless( scalar @lines ) { die "$prog produced no output\n"; } chomp foreach @lines; return @lines; } # Scale a single line by duplicating characters sub Expand($$) { my ($line, $factor) = @_; my $result = ""; foreach my $c (unpack 'C*', $line) { $result .= chr($c) x $factor; } return $result; } die "$0 \n" unless $#ARGV == 2; my @cat1 = Run($ARGV[0]); my @cat2 = Run($ARGV[1]); my @cat3 = Run($ARGV[2]); my $line_count = scalar @cat1; if( $line_count > scalar @cat2 ) { $line_count = scalar @cat2; } if( $line_count > scalar @cat3 ) { $line_count = scalar @cat3; } for(my $i = 0; $i < $line_count; $i++) { if( Expand($cat1[$i], 2) ne $cat2[$i] ) { die "Line $i mismatched\n"; } if( Expand($cat1[$i], 3) ne $cat3[$i] ) { die "Line $i mismatched\n"; } } # All good exit 0;