use Graph; my @pairs=("a,b","c,b","d,f","e,b","f,g"); my $g = new Graph; for ( @pairs ) { my($x,$y) = split /,/; $g->add_edge($x,$y); } my @subgraphs = $g->weakly_connected_components; for my $subgraph ( @subgraphs ) { print "\nA subgraph:\n"; for my $v ( @$subgraph ) { my @s = $g->successors($v); print " $v-$_\n" for @s; } }