#!/usr/bin/perl # https://perlmonks.org/?node_id=1228795 use strict; # color diff use warnings; use Algorithm::Diff qw(traverse_sequences); use Term::ANSIColor; use Getopt::Long; GetOptions 'lines' => \(my $lines), 'chars' => \(my $chars), 'words' => \(my $words), 'help' => \(my $help), or die help("bad option"); sub help { print < }; my @to = do { local @ARGV = shift; map /$regex/g, <> }; traverse_sequences( \@from, \@to, { MATCH => sub {print $from[shift()]}, DISCARD_A => sub {print color('red'), $from[shift()], color 'reset'}, DISCARD_B => sub {print color('green'), $to[pop()], color 'reset'}, } );