#!/usr/bin/perl use warnings; use strict; use Algorithm::Diff qw{ diff }; open my $F1, '<', '1.in' or die $!; my @lines1 = <$F1>; open my $F2, '<', '2.in' or die $!; my @lines2 = <$F2>; chomp @lines1; chomp @lines2; # Transform the input lines. my @path = q(); my @indent = q(); for my $line (@lines1, @lines2) { my ($this_indent, $key) = $line =~ /^( +)(.*)/; if ($this_indent eq $indent[-1]) { $path[-1] = $key } else { if ($this_indent le $indent[-1]) { pop @indent, pop @path while $indent[-1] ge $this_indent; } push @path, $key; push @indent, $this_indent; } $line = join '/', @path; } # Compare the lines. my @diffs = diff(\@lines1, \@lines2); for my $diff (@diffs) { for my $line (@$diff) { print "@$line\n"; } }