perlquestion
vroom
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.
<P>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:
<CODE>
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";
}
</CODE>
Then I go through and sequentially apply the "actions" within diff array from Data::Dumper which looks like so:
<READMORE>
<CODE>
$VAR1 = [
[
[
'-',
'0',
'a'
]
],
[
[
'+',
2,
'd'
]
],
[
[
'-',
4,
'h'
],
[
'+',
4,
'f'
]
],
[
[
'+',
6,
'k'
]
],
[
[
'-',
8,
'n'
],
[
'-',
9,
'p'
],
[
'+',
9,
'r'
],
[
'+',
10,
's'
],
[
'+',
11,
't'
]
]
];
</CODE>
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.
<P>As I see it a number of things could be happening
<OL>
<LI>My splice behavior in the script is wrong
<LI>I'm missing something fundamental with Algorithm::Diff's behavior and the chunks of changes
<LI>Operator error running/writing the script
<LI>Something weird really is going on
</OL>
It's probably one or all of the first three but any help or insight would be much appreciated.
<PRE>
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
</PRE>
<Br><BR><a href="/index.pl?node=vroom&lastnode_id=1072">vroom</a> | Tim Vroom | <a href=mailto:vroom@cs.hope.edu>vroom@cs.hope.edu</A><BR>