#!/usr/bin/perl use warnings; use strict; chomp (my @array = ); my @map = @array; my %hash = (); my %hash2 = (); foreach my $parent (@array) { foreach my $child (@map) { if ($child =~ /$parent/) { push @{$hash{$parent}}, $child unless ($child eq $parent); } } } my @children; my @parent; my %family = (); my %seen = (); foreach my $key (keys %hash) { push @parent, $key; push @children, @{$hash{$key}}; } foreach my $parent (@parent){ foreach my $child (@children) { if ($child eq $parent) { $seen{$parent}++ } } } foreach my $parent (@parent) { if (!$seen{$parent}++ ){ print "Parent: ", $parent, "\n"; foreach (@{$hash{$parent}}) { print " child: $_ \n"; } } } __DATA__ Test_100.26.35.6_1 Test_100.26.35.6_13 Test2_9.25.6.27_2 Test2_9.25.6.27 Test_100.26.35.6 Test_100.26.35.6_10 Test3_28.20.116.210_ide Test3_28.20.116.210 Test4_28.25.6.21_45 Test4_28.25.6.21_45_25