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; } } #### use Graph; use Data::Dumper; use strict; use warnings; my @pairs = qw( a,b c,b d,f e,b f,g ); my $g = new Graph edges => [ map [ split /,/ ], @pairs ]; my @av = map [ map { my $v = $_; map [$v,$_], $g->successors($v) } @$_ ], $g->weakly_connected_components; print Dumper @av;