#!/usr/bin/perl # http://perlmonks.org/?node_id=1192908 use strict; use warnings; use Algorithm::Diff qw(traverse_sequences); open my $fh1, '<', \< =~ /^NAME.*\n(?:(?!NAME).*\n)*/gm; close $fh1; my @file2 = <$fh2> =~ /^NAME.*\n(?:(?!NAME).*\n)*/gm; close $fh2; #use Data::Dump 'pp'; pp \@file1; pp \@file2; traverse_sequences( [ map /(.*)/, @file1 ], # compare only first lines [ map /(.*)/, @file2 ], { MATCH => sub { print $file1[shift()] }, DISCARD_A => sub { print $file1[shift()] }, DISCARD_B => sub { print $file2[pop()] }, } );