String::ShowDiff - Perl extension to help visualize differences between strings
use String::ShowDiff qw/ansi_colored_diff/; print ansi_colored_diff("abcehjlmnp", "bcdefjklmrst"); # or a bit more detailed: my %options = ('u' => 'reset', '+' => 'on_green', '-' => 'on_red'); print ansi_colored_diff($oldstring, $newstring, \%options); # or let's see only the changed words print ansi_colored_diff($old, $new, {context => qr/\w*/, gap => ' '});
This module is a wrapper around the diff algorithm from the module Algorithm::Diff. It's job is to simplify a visualization of the differences of each strings.
Algorithm::Diff
Compared to the many other Diff modules, the output is neither in diff-style nor are the recognised differences on line or word boundaries, they are at character level.
diff
This method compares $string with $changed_string and returns a string for an output on an ANSI terminal. Removed characters from $string are shown by default with a red background, while added characters to $changed_string are shown by default with a green background (the unchanged characters are shown with the default values for the terminal).
$string
$changed_string
The $options_hash allows you to set the colors for the output and the context to be shown. The variable is a reference to a hash with the optional keys: 'u' for the color of the unchanged parts, '-', '+' for the color of the removed and the added parts, 'context' for a regexp specifying the context that shall be shown before and after a changed part and 'gap' for the string that shall be shown between the contexts of two changings. The default values for the options are:
$options_hash
my $default_options = { 'u' => 'reset', '-' => 'on_red', '+' => 'on_green', 'context' => qr/.*/, 'gap' => '', };
The specified colors must follow the conventions for the colored method of Term::ANSIColor. Please read its documentation for details.
colored
The specified context must be a valid regexp, constructed with the qr/.../ operator (or alternatively a string defining a valid regexp). Internal the context around a changing is created with matching the preceding substring with /($context_re)$ and the succeeding substring with ^($context_re). That is important to know if you want to work with backreferences. As an additional group encloses your regexp pattern, the first of your own defined subgroup is in $2 instead of $1. (That's not very nice, but still better than paying the price of using $&).
qr/.../
/($context_re)$
^($context_re)
$2
$1
$&
The gap parameter describes how to fill the gap between two shown changings in their context. Here are some examples of these parameters:
gap
print ansi_colored_diff($s1, $s2, {context => qr/.*/, gap => ''}); # default # will print the complete combined string with the marked removings and # additions print ansi_colored_diff($s1, $s2, {context => qr/.{0,3}/, gap => ' ... '}); # will print all changings with a context of the left and right 3 chars # and will join each of them with a space, 3 dots and a space # Note that it is important to use qr/.{0,3}/ instead of qr/.../ to also # show only a context of 0,1 or 2 chars at the beginning or end of the # strings print ansi_colored_diff($s1, $s2, {context => qr/\w*/, gap => ' '}) # will print all changed words and seperates them with a blank
None by default.
Term::ANSIColor
Algorithm::Diff, Text::Diff, Text::ParagraphDiff, Test::Differences
Janek Schleicher, <bigj@kamelfreund.de>
Copyright 2003 by Janek Schleicher
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install String::ShowDiff, copy and paste the appropriate command in to your terminal.
cpanm
cpanm String::ShowDiff
CPAN shell
perl -MCPAN -e shell install String::ShowDiff
For more information on module installation, please visit the detailed CPAN module installation guide.