What I'd like to accomplish is to display these side-by-side, probably in the following manner:my @sets = ( [qw( a c f g e h i )], # X [qw( a b c d e f g h i )], # Y [qw( a c d e f g h i )], # Z );
To do this, I need to reconcile the discrepancies between the lists and come up with an array of arrays holding the indexes. In this example, the index array would be:X Y Z a a a b c c c d d e e f f f g g g e h h h i i i
I've chosen the order because sets Y and Z have the ordering of (d, e, f, g) in common, and set X is the odd one with (f, g, e).my @idx = ( [0, undef, 1, undef, undef, 2, 3, 4, 5, 6], # X [0, 1, 2, 3, 4, 5, 6, undef, 7, 8], # Y [0, undef, 1, 2, 3, 4, 5, undef, 6, 7], # Z );
So my question is, is this a job for a diff-like module, or some CVS-merge-like module, or what? The idea is to show the lists (which are very similar but probably differ in a couple places here and there) side-by-side and match them up as much as possible without altering their order. Or, put another way, I want to insert "null" elements into the lists as necessary to get them to line up such as I have them displayed.
Update: another problem I might run into is each set having a unique element:
resulting in:my @sets = ( [qw( a b c f g )], # X [qw( a b d f g )], # Y [qw( a b e f g )], # Z );
X Y Z a a a b b b c d e f f f g g g
In reply to Reconciling multiple lists (similar to "merge" in CVS?) by japhy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |