I think this is not really it, but anyway:
use strict;
use warnings;
my @rows;
my %indx;
while(<DATA>) {
chomp;
my @v = split (/\s+/);
my $r = {};
for my $k (@v) {
$r = $indx{$k}[0] if defined $indx{$k};
}
$r->{$v[0]}++;
$r->{$v[1]}++;
# print join(",", @v), "\n";
push(@{$indx{$v[0]}}, $r);
push(@{$indx{$v[1]}}, $r);
push(@rows, $r);
}
my %seen;
for my $r (@rows) {
print (join("\t", keys %$r), "\n") if not $seen{$r}++;
}
__DATA__
AATGCTA|1 AATCGTA|2
AATCGTA|2 AATGGTA|3
AATGGTA|3 AATGGTT|8
TTTGGTA|4 ATTGGTA|5
ATTGGTA|5 CCTGGTA|9
CCCGGTA|6 GCCGGTA|7
GGCGGTA|10 AATCGTA|2
GGCGGTA|10 TGCGGTA|11
CAGGCA|12 GAGGCA|13
Output:
GGCGGTA|10 AATGCTA|1 AATGGTT|8 AATCGTA|2 AATGGTA|3 TGCGGTA|11
CCTGGTA|9 TTTGGTA|4 ATTGGTA|5
CCCGGTA|6 GCCGGTA|7
CAGGCA|12 GAGGCA|13