So, fwiw, I had to do the following to your code to get your method to work the way I wanted and cover all corner cases I've tested. (If the change spans to the very last character for example, then your first condition fails and you never assign $+ to $lsubscr ... So I had to do the following.
in reply to Re: string diff and compare
in thread string diff and compare
($rold ^ $rnew) =~ /^\0*/ and my $lsubscr = (-$+ + 1 && $+) ?
+-$+ + 1 : length $new;
my $losubscr = ($lsubscr == length $new) ? length $old : $lsubscr;
substr $old, $losubscr, 0, '</span>';
This was to fix if the difference was the very last string char and one character is missing from another.
Like in the case of data like:
All sentences end with what
All sentences end with what?
In this case the difference is -1, but because I had to add one to it, it was set to 0. But 0 is the beginning of the string, not the character just past the end of the string.