my %T1 = (
'a|b' => 'a|b',
'b|c' => 'b|c',
'c|d' => 'c|d',
'j|k' => 'j|k',
'k|l' => 'k|l',
'l|m' => 'l|m',
'm|n' => 'm|n'
);
####
my %newTrailsToCombine = (
'a|b' => 'a|b|c|d',
'b|c' => 'a|b|c|d',
'c|d' => 'a|b|c|d',
'j|k' => 'j|k|l|m|n',
'k|l' => 'j|k|l|m|n',
'l|m' => 'j|k|l|m|n',
'm|n' => 'j|k|l|m|n'
);
####
%newTrailsToCombine$VAR1 = {
'm|n' => 'm|n|l|m',
'j|k' => 'j|k|k|l',
'k|l' => 'k|l|j|k|l|m',
'b|c' => 'b|c|a|b|c|d',
'a|b' => 'a|b|b|c',
'l|m' => 'l|m|k|l|m|n',
'c|d' => 'c|d|b|c'
####
#! /opt/perl/bin/perl -w
use strict;
use Data::Dumper;
my %T1 = (
'a|b' => 'a|b',
'b|c' => 'b|c',
'c|d' => 'c|d',
'j|k' => 'j|k',
'k|l' => 'k|l',
'l|m' => 'l|m',
'm|n' => 'm|n'
);
my %trailsToCombine = %T1;
my %newTrailsToCombine;
my %clone_trailsToCombine;
my $seenFirst;
my %seen;
%clone_trailsToCombine = %trailsToCombine;
while (my($K, $V) = each (%trailsToCombine)) {
my @Karr = split (/\|/,$V);
my $tmp = $K;
foreach my $i (@Karr) {
while (my($SK, $SV) = each (%clone_trailsToCombine)) {
if( $K eq $SK) {
#ignore
}
elsif((my $count = grep /$i/,$SK) >= 1 ) {
$tmp = $tmp."|$SK";
}
else {
#no match
}
}
}
if( ! exists $newTrailsToCombine{$K}) {
$newTrailsToCombine{$K} = $tmp;
}
}
#process_trailsToCombine(%trailsToCombine);
print "\n Dumping \%newTrailsToCombine";
print Dumper(\%newTrailsToCombine);