# stolen at http://www.perlmonks.org/index.pl?node_id=115928 # as well as the get and escapeHTML functions # get options and file contents as array refs my $old = get($old_file, 1, 1); my $new = get($file, 1, 1); open (SDIFF, "> $result_file") || &Error("Can't open $result_file: $!"); # print out the colour coded diff - common code is black # code in $old_file but not $new_file is (bg) red # code in $new_file but not $old_file is (bg) green print SDIFF "
"; print SDIFF ""; print SDIFF "\n"; print SDIFF "
Color Key:
".escapeHTML($old_file)."
".escapeHTML($file)."

"; my $a; my $b; my $a_lines; my $b_lines; traverse_sequences({ MATCH => sub { if ($a) { if ($b) { #$b_lines to compare with $a_lines # print a_lines with hilited diffs print SDIFF ""; # now print b_lines with hilited diffs print SDIFF ""; $b=0; $b_lines=""; } else { print SDIFF ""; } $a=0; $a_lines=""; } else { if ($b) { print SDIFF ""; $b=0; $b_lines=""; } } print SDIFF "" }, DISCARD_A => sub { $a++; $a_lines.=$old->[$_[0]]; }, DISCARD_B => sub { $b++; $b_lines.=$new->[$_[1]]; }}, $old, $new, ); print SDIFF "
"; my @a_table=split(/ */, $a_lines); my @b_table=split(/ */, $b_lines); traverse_sequences( { MATCH => sub { print SDIFF escapeHTML($a_table[$_[0]]) }, DISCARD_A => sub { print SDIFF "" . escapeHTML($a_table[$_[0]]).""}, DISCARD_B => sub { print SDIFF "" }, }, \@a_table, \@b_table,); print SDIFF "
"; traverse_sequences( { MATCH => sub { print SDIFF escapeHTML($b_table[$_[1]]) }, DISCARD_A => sub { print SDIFF ""}, DISCARD_B => sub { print SDIFF "" . escapeHTML($b_table[$_[1]])."" }, }, \@a_table, \@b_table,); print SDIFF "
".escapeHTML($a_lines)."
".escapeHTML($b_lines)."
".escapeHTML($old->[$_[0]])."
\n"; close SDIFF; last if $caught_sigint; }