vroom has asked for the wisdom of the Perl Monks concerning the following question:
I'm trying to take diffs between a current document and a version with a proposed change. Then the author of the document could okay or discard the changes after viewing them.
vroom | Tim Vroom | vroom@cs.hope.edu
I'm working on writing an applyChange function but am having some trouble getting it to work correctly. Here's a toy script I've been playing with:
Then I go through and sequentially apply the "actions" within diff array from Data::Dumper which looks like so:use Data::Dumper; use Algorithm::Diff qw(diff); @a=qw(a b c e h j l m n p); @b=qw(b c d e f j k l m r s t); print "@a\n"; print "@b\n"; my $diff=diff(\@a,\@b); while(<>){ chomp; my(@action)=split(/ /,$_); if($action[0] eq "+"){ splice(@a, $action[1], 0, $action[2]); } elsif($action[0] eq "-"){ splice(@a, $action[1],1); } print "@a\n"; print "@b\n"; }
I then run my script and input the "actions" in the array above. All goes fine until the - 8 'n' command. There isn't an 'n' in location 8 at that point and it looks like we really want to take away the n at spot 9.$VAR1 = [ [ [ '-', '0', 'a' ] ], [ [ '+', 2, 'd' ] ], [ [ '-', 4, 'h' ], [ '+', 4, 'f' ] ], [ [ '+', 6, 'k' ] ], [ [ '-', 8, 'n' ], [ '-', 9, 'p' ], [ '+', 9, 'r' ], [ '+', 10, 's' ], [ '+', 11, 't' ] ] ];
As I see it a number of things could be happening
- My splice behavior in the script is wrong
- I'm missing something fundamental with Algorithm::Diff's behavior and the chunks of changes
- Operator error running/writing the script
- Something weird really is going on
a b c e h j l m n p b c d e f j k l m r s t - 0 a b c e h j l m n p b c d e f j k l m r s t + 2 d b c d e h j l m n p b c d e f j k l m r s t - 4 h b c d e j l m n p b c d e f j k l m r s t + 4 f b c d e f j l m n p b c d e f j k l m r s t + 6 k b c d e f j k l m n p b c d e f j k l m r s t - 8 n b c d e f j k l n p b c d e f j k l m r s t - 9 p b c d e f j k l n b c d e f j k l m r s t + 9 r b c d e f j k l n r b c d e f j k l m r s t + 10 s b c d e f j k l n r s b c d e f j k l m r s t + 11 t b c d e f j k l n r s t b c d e f j k l m r s t
vroom | Tim Vroom | vroom@cs.hope.edu
Back to
Seekers of Perl Wisdom